Я предполагаю, что вас интересует выделение цифр изображения и что вы хотите вручную указать ROI (с учетом того, что вы написали).
Вы можете use better coordinates for the ROI and crop that into a new cv::Mat
с ним, чтобы получить что-то вроде ниже выхода:
Выполнение порога на этом изображении только имеет смысл, если вы хотите, чтобы изолировать цифры, чтобы сделать некоторое признание позже. Хорошая техника для этого предлагается cv::inRange()
, которая выполняет пороговую операцию на всех каналах (изображение RGB == 3 канала).
Примечание: cv::Mat
хранит пиксели в порядке BGR, это важно помнить, когда вы указываете значения порога.
В качестве простого теста, можно выполнить порог из B: 70 G: 90 Р: от 100 до B: 140 G: 140 R: 140, чтобы получить следующий вывод:
Неплохо! Я немного изменил код, чтобы получить эти результаты:
#include <cv.h>
#include <highgui.h>
#include <iostream>
int main()
{
cv::Mat image = cv::imread("input.jpg");
if (!image.data)
{
std::cout << "!!! imread failed to load image" << std::endl;
return -1;
}
cv::Rect roi;
roi.x = 165;
roi.y = 50;
roi.width = 440;
roi.height = 80;
/* Crop the original image to the defined ROI */
cv::Mat crop = image(roi);
cv::imwrite("colors_roi.png", crop);
/* Threshold the ROI based on a BGR color range to isolate yellow-ish colors */
cv::Mat dest;
cv::inRange(crop, cv::Scalar(70, 90, 100), cv::Scalar(140, 140, 140), dest);
cv::imwrite("colors_threshold.png", dest);
cv::imshow("Example", dest);
cv::waitKey();
return 0;
}