2012-10-17 14 views
10

Powiel możliwe:
Understanding region of interest in openCV 2.4OpenCV sub-obraz z obrazu Mat

chcę uzyskać sub-obraz (ten ograniczony przez czerwone pole poniżej) z obrazu (Format maty). jak mam to zrobic?

enter image description here

oto moja postęp do tej pory:

include <opencv2/core/core.hpp> 
#include <opencv2/highgui/highgui.hpp> 
#include <opencv2/imgproc/imgproc.hpp> 

using namespace std; 
using namespace cv; 
int main() 
{ 
    Mat imgray, thresh; 
    vector<vector<Point> >contours; 
    vector<Point> cnt; 
    vector<Vec4i> hierarchy; 
    Point leftmost; 

    Mat im = imread("igoy1.jpg"); 
    cvtColor(im, imgray, COLOR_BGR2GRAY); 
    threshold(imgray, thresh, 127, 255, 0); 
    findContours(thresh, contours, hierarchy, RETR_TREE,CHAIN_APPROX_SIMPLE); 
} 
+1

To pytanie jak to już zostało zadane i odpowiedzi, przynajmniej [tutaj] (http://stackoverflow.com/questions/12705817/understanding-region-of-interest- in-opencv-2-4/12706208 # 12706208) i [tam] (http://stackoverflow.com/questions/12369697/access-sub-matrix-of-i-multidimensional-mat-in-opencv/12370641#12370641) – remi

Odpowiedz

24

można rozpocząć zbieranie kontur (w Twoim przypadku, kontur odpowiadający strony). Następnie obliczyć prostokąt ograniczający dla tego konturu. Wreszcie tworzysz nowy nagłówek matrycy.

int n=0;// Here you will need to define n differently (for instance pick the largest contour instead of the first one) 
cv::Rect rect(contours[n]); 
cv::Mat miniMat; 
miniMat = imgray(rect); 

Ostrzeżenie: W tym przypadku Minimat jest podregion imgray. Oznacza to, że jeśli modyfikujesz pierwszy, modyfikujesz ten drugi. Aby tego uniknąć, należy użyć miniMat.copyTo(anotherMat).

Mam nadzieję, że to pomogło, Powodzenia

+1

dziękuję! Mam dane wyjściowe, które mają prawidłowy wynik, ale zawierają również inne kontury. Użyłem RETR_EXTERNAL zamiast RETR_TREE tak, że będą mniejsze kontury. jak rozpoznać, który kontur jest prawidłowy? –

+1

@OgNamdik Można przechodzić przez kontury i obliczać obszar lub obszar prostokąta ograniczającego (lub innych parametrów) dla każdego z nich. W twoim przypadku wydaje się, że możesz po prostu zachować kontur, który ma największy obszar ... Nie wahaj się też zaakceptować odpowiedzi, jeśli jesteś z niej zadowolony. : D –

+0

ok, dziękuję bardzo! –