C++代码

  1. // file name: convert.cpp
  2. #include <opencv2/opencv.hpp>
  3. // BGR 转 YUV
  4. void BGR2YUV(const cv::Mat bgrImg, cv::Mat &y, cv::Mat &u, cv::Mat &v)
  5. {
  6. cv::Mat out;
  7. cv::cvtColor(bgrImg, out, cv::COLOR_BGR2YUV);
  8. cv::bgr channel[3];
  9. cv::split(out, channel);
  10. y = channel[0];
  11. u = channel[1];
  12. v = channel[2];
  13. }
  14. // YUV 转 BGR
  15. void YUV2BGR(const cv::Mat y, const cv::Mat u, const cv::Mat v, cv::Mat& bgrImg)
  16. {
  17. std::vector<cv::Mat> inChannels;
  18. inChannels.push_back(y);
  19. inChannels.push_back(u);
  20. inChannels.push_back(v);
  21. // 合并3个单独的 channel 进一个矩阵
  22. cv::Mat yuvImg;
  23. cv::merge(inChannels, yuvImg);
  24. cv::cvtColor(yuvImg, bgrImg, cv::COLOR_YUV2BGR);
  25. }
  26. // 使用例子
  27. int main()
  28. {
  29. cv::Mat origImg = cv::imread("test.png");
  30. cv::Mat y, u, v;
  31. BGR2YUV(origImg, y, u, v);
  32. cv::Mat bgrImg;
  33. YUV2BGR(y, u, v, bgrImg);
  34. cv::imshow("origImg", origImg);
  35. cv::imshow("Y channel", y);
  36. cv::imshow("U channel", u);
  37. cv::imshow("V channel", v);
  38. cv::imshow("converted bgrImg", bgrImg);
  39. cv::waitKey(0);
  40. return 0;
  41. }

编译

  1. g++ -o convert convert.cpp --std=c++11 `pkg-config --cflags --libs opencv`
  2. ./convert

Python代码

  1. # file name: convert.py
  2. import cv2
  3. def bgr2yuv(img):
  4. yuv_img = cv2.cvtColor(img, cv2.COLOR_BGR2YUV)
  5. y, u, v = cv2.split(yuv_img)
  6. return y, u, v
  7. def yuv2bgr(y, u, v):
  8. yuv_img = cv2.merge([y, u, v])
  9. bgr_img = cv2.cvtColor(yuv_img, cv2.COLOR_YUV2BGR)
  10. return bgr_img
  11. def main():
  12. orig_img = cv2.imread('test.png')
  13. y, u, v = bgr2yuv(orig_img)
  14. bgr_img = yuv2bgr(y, u, v)
  15. cv2.imshow('orig_img', orig_img)
  16. cv2.imshow('Y channel', y)
  17. cv2.imshow('U channel', u)
  18. cv2.imshow('V channel', v)
  19. cv2.imshow('bgr_img', bgr_img)
  20. cv2.waitKey(0)
  21. if __name__ == '__main__':
  22. main()

运行程序:

  1. python3 convert.py

https://vra.github.io/2019/12/19/opencv-bgr-yuv-conversion/#more