来自YUV的Opencv imshow Y.

时间:2016-05-05 22:02:54

标签: opencv yuv

我试图提取和显示

来自YUV转换图像的Y通道

我的代码如下:

Mat src, src_resized, src_gray;

src = imread("11.jpg", 1);

resize(src, src_resized, cvSize(400, 320));

cvtColor(src_resized, src_resized, cv::COLOR_BGR2RGB);

/*
I've tried both with and without the upper conversion 
(mentioned here as bug 
http://stackoverflow.com/questions/7954416/converting-yuv-into-bgr-or-rgb-in-opencv 
 in an opencv 2.4.* version - mine is 2.4.10 )
*/

cvtColor(src_resized, src_gray, CV_RGB2YUV); //YCrCb

vector<Mat> yuv_planes(3);
split(src_gray,yuv_planes);

Mat g, fin_img;

g = Mat::zeros(Size(src_gray.cols, src_gray.rows),0);

 // same result withg = Mat::zeros(Size(src_gray.cols, src_gray.rows), CV_8UC1);

vector<Mat> channels;

channels.push_back(yuv_planes[0]);
channels.push_back(g);
channels.push_back(g);

merge(channels, fin_img);

imshow("Y ", fin_img);

waitKey(0);

return 0;

结果我期待灰色图像显示发光。

相反,我会根据(第一/第二/第三)的位置获得B / G / R频道图像

channels.push_back(yuv_planes[0]);

如下所示: Result

我错过了什么? (我计划使用亮度来做行/列的总和,然后使用获得的数据提取车牌)

1 个答案:

答案 0 :(得分:1)

问题是仅在一个通道中显示发光而不是用它填充所有通道。

如果有其他人遇到同样的问题,请改变

Mat g, fin_img;

g = Mat::zeros(Size(src_gray.cols, src_gray.rows),0);

vector<Mat> channels;

channels.push_back(yuv_planes[0]);
channels.push_back(g);
channels.push_back(g);

要 (用所需频道填充所有频道)

Mat  fin_img;

vector<Mat> channels;

channels.push_back(yuv_planes[0]);
channels.push_back(yuv_planes[0]);
channels.push_back(yuv_planes[0]);