找到图像的差异

时间:2016-03-14 06:48:43

标签: c++ opencv image-comparison

我的图像如下:

enter image description here

我想检测5个刻度盘进行处理。霍夫圈子正在检测所有其他不相关的圈子。为了解决这个问题,我创造了一个普通的图像,并与此产生了绝对的差异它给出了这个图像:

enter image description here

我画了一下盒子,最后的图片是:

enter image description here

我的代码如下:

Mat img1 = imread(image_path1, COLOR_BGR2GRAY); 
Mat img2 = imread(image_path2, COLOR_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;
        }
    }
}

cvtColor(diffImage,diffImage,COLOR_BGR2GRAY);

Mat1b img = diffImage.clone();

// Binarize image
Mat1b bin = img > 70;

// Find non-black points
vector<Point> points;
findNonZero(bin, points);

// Get bounding rect
Rect box = boundingRect(points);

// Draw (in color)
rectangle(img1, box, Scalar(0,255,0), 3);

// Show
imshow("Result", img1);

现在问题是我无法将普通图像与任何其他不同尺寸的图像进行比较。任何指向正确方向的指针都会非常有用。

此致 Saghir A. Khatr

修改 我的简单图像如下

enter image description here

我想创建一个标准样本普通图像,可以与任何图像一起使用来检测该部分...

0 个答案:

没有答案