2016-03-07 8 views
14

मैं पाइथन में ओपनसीवी के कनेक्टेड कॉम्पोनेंट्स विथस्टैट्स() फ़ंक्शन का उपयोग करने का उदाहरण ढूंढ रहा हूं, ध्यान दें कि यह केवल ओपनसीवी 3 या नए के साथ उपलब्ध है। आधिकारिक दस्तावेज केवल सी ++ के लिए एपीआई दिखाता है, भले ही फ़िथन के लिए संकलित होने पर फ़ंक्शन मौजूद हो। मैं इसे कहीं भी ऑनलाइन नहीं ढूंढ सका।पायथन में आँकड़े के साथ ओपनसीवी के कनेक्टेड घटकों का उपयोग कैसे करें?

उत्तर

38

समारोह इस प्रकार काम करता है:

# Import the cv2 library 
import cv2 
# Read the image you want connected components of 
src = cv2.imread('/directorypath/image.bmp') 
# Threshold it so it becomes binary 
ret, thresh = cv2.threshold(src,0,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU) 
# You need to choose 4 or 8 for connectivity type 
connectivity = 4 
# Perform the operation 
output = cv2.connectedComponentsWithStats(thresh, connectivity, cv2.CV_32S) 
# Get the results 
# The first cell is the number of labels 
num_labels = output[0] 
# The second cell is the label matrix 
labels = output[1] 
# The third cell is the stat matrix 
stats = output[2] 
# The fourth cell is the centroid matrix 
centroids = output[3] 

लेबल एक मैट्रिक्स इनपुट छवि जहां प्रत्येक तत्व अपने लेबल के बराबर एक मूल्य है का आकार है।

आंकड़े फ़ंक्शन की गणना करने वाले आंकड़ों का एक मैट्रिक्स है। इसकी लंबाई लंबाई की संख्या और आंकड़ों की संख्या के बराबर चौड़ाई है। यह इसके लिए OpenCV प्रलेखन के साथ इस्तेमाल किया जा सकता: हर लेबल के लिए

सांख्यिकी उत्पादन, पृष्ठभूमि लेबल सहित, नीचे देखें उपलब्ध आँकड़ों के लिए। आंकड़े आंकड़े [लेबल, COLUMN] के माध्यम से उपलब्ध हैं जहां उपलब्ध कॉलम नीचे परिभाषित किए गए हैं।

  • cv2.CC_STAT_LEFT वाम-पंथी (एक्स) समन्वय जो क्षैतिज दिशा में बाउंडिंग बॉक्स के समावेशी शुरुआत है।
  • cv2.CC_STAT_TOP शीर्षतम (वाई) समन्वय जो लंबवत दिशा में बाध्यकारी बॉक्स की समावेशी शुरुआत है।
  • cv2.CC_STAT_WIDTH जुड़ा घटक
  • की बाउंडिंग बॉक्स के क्षैतिज आकार
  • cv2.CC_STAT_HEIGHT बाउंडिंग बॉक्स के लंबवत आकार
  • cv2.CC_STAT_AREA कुल क्षेत्र (पिक्सेल में)

centroids प्रत्येक केन्द्रक के x और y स्थानों के साथ एक मैट्रिक्स है। इस मैट्रिक्स में पंक्ति लेबल संख्या से मेल खाती है।

+0

मुझे यह कहना होगा कि किसी कारण से, मुझे cv2.THRESH_BINARY + cv2.THRESH_OTSU के बजाय cv2.THRESH_BINARY का उपयोग करना पड़ा, फिर मुझे इसे काम करने के लिए फ़्लोट करने के लिए पूर्णांक और ताजा करने के लिए src डालना पड़ा। मुझे नहीं पता क्यों, लेकिन यह अन्यथा काम नहीं करता था। –

+0

मुझे समझ में नहीं आता है कि जब आप आउटपुट का हिस्सा तब भी लेते हैं तो आप लेबल्स मैट्रिक्स क्यों बनाते हैं? – ypnos

+1

@ypnos आपको आंकड़ों के साथ जुड़े घटकों की आवश्यकता नहीं है, लेकिन बिना आंकड़ों के जुड़े घटकों के लिए करें। मुझे लगता है कि हिस्सा मुझे दूसरी तरफ से छोड़ दिया गया था। मैंने इसे अभी तय किया है। चीयर्स! –

0

आप ग्रेस्केल छवि आप कर सकते हैं का उपयोग कर रहे हैं, तो Zack Knopp जवाब है, को जोड़ना बस का उपयोग करें:

import cv2 
import numpy as np 

src = cv2.imread("path\\to\\image.png", 0) 
binary_map = (src > 0).astype(np.uint8) 
output = cv2.connectedComponentsWithStats(binary_map, connectivity, cv2.CV_32S) 

जब मैं एक ग्रेस्केल छवि यह काम नहीं किया और यह मेरा समाधान था पर Zack Knopp जवाब उपयोग करने की कोशिश।

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