【发布时间】:2016-03-11 21:21:31
【问题描述】:
我有一个无法解决的问题。我正在使用 OpenCV 对两张图像进行区分。我在单独的Mat 中获得输出。使用的差异方法是AbsDiff 方法。这是代码。
char imgName[15];
Mat img1 = imread(image_path1, COLOR_BGR2GRAY);
Mat img2 = imread(image_path2, COLOR_BGR2GRAY);
/*cvtColor(img1, img1, CV_BGR2GRAY);
cvtColor(img2, img2, CV_BGR2GRAY);*/
cv::Mat diffImage;
cv::absdiff(img2, img1, diffImage);
cv::Mat foregroundMask = cv::Mat::zeros(diffImage.rows, diffImage.cols, CV_8UC3);
float threshold = 30.0f;
float dist;
for(int j=0; j<diffImage.rows; ++j)
{
for(int i=0; i<diffImage.cols; ++i)
{
cv::Vec3b pix = diffImage.at<cv::Vec3b>(j,i);
dist = (pix[0]*pix[0] + pix[1]*pix[1] + pix[2]*pix[2]);
dist = sqrt(dist);
if(dist>threshold)
{
foregroundMask.at<unsigned char>(j,i) = 255;
}
}
}
sprintf(imgName,"D:/outputer/d.jpg");
imwrite(imgName, diffImage);
我想将差异部分限制在一个矩形中。 findContours 正在绘制太多轮廓。但我只需要一个特定的部分。我的差异图像是
我想在所有五个表盘周围画一个矩形。
请指点我正确的方向。
问候,
【问题讨论】:
标签: c++ opencv visual-studio-2012