2012-10-17 20 views
10

संभव डुप्लिकेट:
Understanding region of interest in openCV 2.4OpenCV एक चटाई छवि से उप छवि

मैं एक छवि से एक उप छवि (एक नीचे लाल बॉक्स से घिरा) प्राप्त करना चाहते हैं (मट प्रारूप)। मैं यह कैसे करु?

enter image description here

यहाँ मेरी प्रगति अब तक बताया गया है:

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

इस सवाल के रूप में पहले से ही कहा गया और उत्तर दिया, कम से कम [यहां] (पर http://stackoverflow.com/questions/12705817/understanding-region-of-interest- इन-ओपनसीवी -2-4/12706208 # 12706208) और [वहां] (http://stackoverflow.com/questions/12369697/access-sub-matrix-of-a-multidimensional-mat-in-opencv/12370641#12370641) – remi

उत्तर

24

आप एक समोच्च उठा शुरू कर सकते हैं (आपके मामले में, समोच्च हाथ करने के लिए इसी)। फिर, आप इस समोच्च के लिए बाध्य आयताकार की गणना करते हैं। अंत में आप इससे एक नया मैट्रिक्स हेडर बनाते हैं।

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); 

चेतावनी: इस मामले में, miniMat imgray का एक उपक्षेत्र है। इसका मतलब यह है कि यदि आप पूर्व को संशोधित करते हैं, तो आप बाद वाले को भी संशोधित करते हैं। इससे बचने के लिए miniMat.copyTo(anotherMat) का उपयोग करें।

मुझे आशा है कि यह मदद की, गुड लक

+1

धन्यवाद! मुझे एक आउटपुट मिला जिसमें सही आउटपुट है लेकिन इसमें अन्य रूप भी शामिल हैं। मैंने RETR_TREE के बजाय RETR_EXTERNAL का उपयोग किया ताकि कम समरूपताएं हों। मैं कैसे पहचान सकता हूं कि कौन सा समोच्च सही है? –

+1

@OgNamdik आप समोच्चों के माध्यम से लूप कर सकते हैं और प्रत्येक के लिए बाध्य आयत (या अन्य पैरामीटर) के क्षेत्र या क्षेत्र की गणना कर सकते हैं। आपके मामले में, ऐसा लगता है कि आप केवल उस समोच्च को रख सकते हैं जिसमें सबसे बड़ा क्षेत्र है ... इसके अलावा, अगर आप इससे खुश हैं तो जवाब स्वीकार करने में संकोच नहीं करें। : डी –

+0

ठीक है बहुत बहुत धन्यवाद! –

संबंधित मुद्दे