2011-10-30 18 views
7

आरओआई केवल आयत के साथ लागू किया जा सकता है। हालांकि मुझे एक समोच्च है कि मैं आरओआई के रूप में सेट करना चाहता हूं। क्या किसी के पास कोई विचार है कि मैं एक आयत के बजाय आरओआई के रूप में एक समोच्च का उपयोग करने के बारे में कैसे जाऊंगा?ओपनसीवी में आरओआई का उपयोग करना?

अन्यथा यदि संभव नहीं है, तो मैं अपने कार्यों को केवल विशिष्ट समोच्च में पिक्सेल में कैसे केंद्रित कर सकता हूं?

धन्यवाद

पुनश्च: इन सभी OpenCV सवालों के लिए खेद है। बस वास्तव में उलझन में: $

+0

आपके पास शीर्षक में एक टाइपो है। इसके अलावा, अधिकांश ओपनसीवी कार्यों में मास्क पैरामीटर होता है और केवल उनके इनपुट के क्षेत्र पर काम करता है जहां मास्क का विशेष मान होता है। क्या वास्तव में आप करना चाहते हैं? –

+1

मैं पूर्वनिर्धारित समोच्च में पिक्सल पर हिस्टोग्राम बैक प्रक्षेपण का उपयोग करना चाहता हूं। तो मूल रूप से मैं उस भरे हुए समोच्च का एक काला और सफ़ेद मुखौटा बनाउंगा और फिर उस छवि के लिए मुखौटा के रूप में इसका उपयोग करूंगा जिसे मैं हिस्टोग्राम बैकप्रोजेक्शन का उपयोग करना चाहता हूं? – user1017485

+0

यदि आप समोच्च के साथ मास्किंग करने से पहले सुझाव दिया गया है, तो समोच्च के साथ मास्किंग करने से पहले सुझाव दिया गया है (समोच्च को खींचें - काले रंग पर सफेद इसे मूल छवि पर मुखौटा के रूप में उपयोग करें) जाने का स्पष्ट तरीका है। – AruniRC

उत्तर

7

ओपनसीवी केवल आयताकार आरओआई का समर्थन करता है।

हालांकि, विशिष्ट पिक्सेल के लिए कुछ प्रसंस्करण करने के लिए, आप कुछ सहायक कार्यों का उपयोग कर सकते हैं।

उनमें से एक बिंदु पॉलीगोनटेस्ट() है, जो आपको बताता है कि एक दिया गया पिक्सेल बहुभुज पर नहीं है।

तो तुम भी इस नमूने http://opencv.itseez.com/doc/tutorials/imgproc/shapedescriptors/point_polygon_test/point_polygon_test.html#point-polygon-test

जाँच एक और (तेज) विकल्प @ andeas-haferburg द्वारा sugested एक है की तरह

for(i=0;i<height;i++) 
{ 
     for(j=0;j<width;j++) 
     { 
      if(pointPolygonTest(Point(i,j),myPolygon)) 
      { 
       // do some processing 
      } 
     } 
} 

कुछ लिख सकते हैं। एक नया ग्रेस्केल छवि में अपने बहुभुज चित्रकला द्वारा एक मुखौटा बनाओ:

drawPoly() 

(ताकि पृष्ठभूमि 0 है, और बहुभुज 255 है), तो फिर तुम कुछ अन्य कार्य करने के लिए पारित कर सकते हैं, या अपने आप को द्वारा इसका इस्तेमाल:

for(i=0;i<height;i++) 
{ 
     for(j=0;j<width;j++) 
     { 
      if(mask[j+w*i])) 
      { 
       // do some processing 
      } 
     } 
} 

ऊपर दिया गया उदाहरण सिर्फ छद्म कोड है, आपको इसे काम करना है।

+0

धन्यवाद, यह बहुत मदद करता है – user1017485

+0

@ user1017485 क्या आप इसे समझते हैं कि इसे कैसे किया जाए? मुझे एक ही समस्या है। – Mzk

+0

@ user1017485 क्या आपने इसे समझ लिया है? मैं यह भी जानना चाहता हूं कि यह कैसे करें। – bearzk