绘制对某些像素openCV的影响

时间:2012-12-20 14:50:24

标签: c++ opencv

我正在尝试定位一些帧的某些区域,该帧位于Ycbcr颜色空间中。我必须根据它们的Y值选择这些区域。

所以我写了这段代码:

Mat frame. ychannel;
VideoCapture cap(1);
int key =0;
int maxV , minV;
Point max, min;
while(key != 27){
     cap >> frame;
     cvtColor(frame,yframe,CV_RGB_YCrCb); // converting to YCbCr color space 
     extractChannel(yframe, yframe, 0); // extracting the Y channel 
     cv::minMaxLoc(yframe,&minV,&maxV,&min,&max);
     cv::threshold(outf,outf,(maxV-10),(maxV),CV_THRESH_TOZERO);
/**
Now I want to use :
cv::rectangle()
but I want to draw a rect around any pixel (see the picture bellow)that's higher than (maxV-10) 
and that during the streaming 
**/
     key = waitKey(1);
}

我画了这张图片,它有助于理解我该做什么。

enter image description here

感谢您的帮助。

2 个答案:

答案 0 :(得分:4)

一旦你应用了你的阈值,你将得到一个包含多个connected components的二进制图像,如果你想在每个组件周围绘制一个矩形,那么你首先需要检测这些组件。

OpenCV函数findContours就是这样,将二进制图像传递给它,它将为您提供一个点矢量矢量,用于跟踪图像中每个分量的边界。

cv::Mat binaryImage;
std::vector<std::vector<cv::Point>> contours;

cv::findContours(binaryImage, contours, CV_RETR_EXTERNAL, CV_CHAIN_APPROX_SIMPLE)

然后您需要做的就是找到每组点的bounding rectangle并将它们绘制到输出图像中。

for (int i=0; i<contours.size(); ++i)
{
    cv::Rect r = cv::boundingRect(contours.at(i));
    cv::rectangle(outputImage, r, CV_RGB(255,0,0));
}

答案 1 :(得分:3)

您必须找到connected components中的每一个,并绘制其边界框。