c++ - 在差异区域周围绘制矩形

标签 c++ opencv visual-studio-2012

我有一个我无法解决的问题。我正在使用 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);

我想将差异部分绑定(bind)在一个矩形中。 findContours 绘制了过多的轮廓。但我只需要一个特定的部分。我的差异图像是 here

我想在所有五个刻度盘周围绘制一个矩形。

请指出正确的方向。

问候,

最佳答案

我将搜索给出非黑色像素的 i 索引的最高值;那是正确的边界。

最低的非黑色 i 是左边框。与 j 类似。

关于c++ - 在差异区域周围绘制矩形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35938620/

相关文章:

java - NoClassDefFound 错误,因为 System.loadLibrary(Core.NATIVE_LIBRARY_NAME)

c# - 选择装配体时工具箱找不到零部件

.net - 运行 "Identity and Access"向导后,带有 VS 2012 的 MVC4 应用程序中的 Principal 是 RolePrincipal 而不是 ClaimsPrincipal

具有相同布局的不同类型之间的C++转换

c++ - 为什么复制构造函数失败到 "copy"

c++ - StringCchCat 用于在 VC++ 中连接整数和字符串

c++ - 构造函数中的内存分配异常

python - PyTesseract 无法识别图像

visual-studio-2010 - Web 部署与 VS2010 配合使用; VS2012 失败

c++ - opencv如何获得轮廓的中线