У меня есть изображение следующим образом:
Я хочу обнаружить 5 циферблатов для обработки. Hough круги обнаруживает все другие не относящиеся к делу круги. Чтобы решить эту проблему, я создал простое изображение и сгенерировал абсолютную разницу с этим. Это дало это изображение:
Я нарисовал рамку вокруг него, и окончательное изображение:
Мой код выглядит следующим образом:
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);
Теперь проблема в том, что я не могу сравнить обычное изображение с другими изображениями разных размеров. Любой указатель в правильном направлении будет очень полезным.
С Уважением,
Сагир А. Хатр
редактировать
Мое простое изображение выглядит следующим образом
Я хочу создать стандартный образец обычного изображения, которое можно использовать с любым изображением для обнаружения этой части …
Задача ещё не решена.
Других решений пока нет …