2013-04-09 8 views
2

Я делаю работу, где я должен найти область интереса (ROI), а затем выполнить порог на изображении:Обнаружение ROI с помощью OpenCV

enter image description here

Поскольку я не из поля вычислений, у меня возникают некоторые трудности.

Я начал пытаться найти ROI через следующий код:

// code 
string filename = "2011-06-11-09%3A12%3A15.387932.bmp"; 

Mat img = imread(filename) 

if (!img.data) 
{ 
    std::cout << "!!! imread não conseguiu abrir imagem: " << filename << std::endl; 
    return -1; 
} 

cv::Rect roi; 
roi.x = 0 
roi.y = 90 

roi.width = 400; 
roi.height = 90; 

cv::Mat crop = original_image(roi); 
cv::imwrite("2011-06-11-09%3A12%3A15.387932.bmp", crop); 

Большое спасибо.

ответ

8

Я предполагаю, что вас интересует выделение цифр изображения и что вы хотите вручную указать ROI (с учетом того, что вы написали).

Вы можете use better coordinates for the ROI and crop that into a new cv::Mat с ним, чтобы получить что-то вроде ниже выхода:

enter image description here

Выполнение порога на этом изображении только имеет смысл, если вы хотите, чтобы изолировать цифры, чтобы сделать некоторое признание позже. Хорошая техника для этого предлагается cv::inRange(), которая выполняет пороговую операцию на всех каналах (изображение RGB == 3 канала).

Примечание: cv::Mat хранит пиксели в порядке BGR, это важно помнить, когда вы указываете значения порога.

В качестве простого теста, можно выполнить порог из B: 70 G: 90 Р: от 100 до B: 140 G: 140 R: 140, чтобы получить следующий вывод:

enter image description here

Неплохо! Я немного изменил код, чтобы получить эти результаты:

#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; 
} 
Смежные вопросы