我的图像如下:
我想检测5个刻度盘进行处理。霍夫圈子正在检测所有其他不相关的圈子。为了解决这个问题,我创造了一个普通的图像,并与此产生了绝对的差异它给出了这个图像:
我画了一下盒子,最后的图片是:
我的代码如下:
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
修改 我的简单图像如下
我想创建一个标准样本普通图像,可以与任何图像一起使用来检测该部分...