2016-09-28 24 views
5

मैं अंशांकन शतरंज की दहलीज प्राप्त करने की कोशिश कर रहा हूं। मैं सीधे शतरंज कोनों का पता लगा सकता हूं क्योंकि कुछ धूल है क्योंकि मैं एक माइक्रो शतरंज का निरीक्षण करता हूं। मैं कई तरीकों का प्रयास करता हूं और HoughLinesP सबसे आसान तरीका प्रतीत होता है। लेकिन परिणाम अच्छे नहीं हैं, मेरे परिणामों में सुधार कैसे करें?पायथन ओपनसीवी के साथ हौफलाइन के साथ एक छवि में ऊर्ध्वाधर और क्षैतिज रेखाओं का पता लगाने के लिए कैसे?

import numpy as np 
import cv2 

img = cv2.imread('lines.jpg') 
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) 
edges = cv2.Canny(gray,50,150,apertureSize = 3) 
print img.shape[1] 
print img.shape 
minLineLength=100 
lines = cv2.HoughLinesP(image=edges,rho=0.02,theta=np.pi/500, threshold=10,lines=np.array([]), minLineLength=minLineLength,maxLineGap=100) 

a,b,c = lines.shape 
for i in range(a): 
    cv2.line(img, (lines[i][0][0], lines[i][0][1]), (lines[i][0][2], lines[i][0][3]), (0, 0, 255), 3, cv2.LINE_AA) 
    cv2.imwrite('houghlines5.jpg',img) 

आप नीचे दिए गए चित्र पर देख सकते हैं, मैं नहीं कर सकते मेरी बिसात प्राप्त, लाइनों दिशाओं का एक बहुत में साजिश रची है ... (मूल चित्र: https://s22.postimg.org/iq2b91xq9/droite_Image_00000.jpg)

enter image description here

+0

उपयोग थ्रेशोल्डिंग, छोटे अंक (इरोड, फैलने) कम करने की कोशिश या। – linusg

+0

मैं पहले से ही कोशिश करता हूं लेकिन आटा लाइनों के साथ नहीं मिला। शायद यह लाइनों को प्राप्त करने में मदद कर सकता है? आपके नरक के लिए धन्यवाद;) – user3601754

+0

मैं वास्तव में एक और कोशिश देने के लिए थ्रेसहोल्डिंग होगा! – linusg

उत्तर

15

आप rho के लिए बहुत कम मूल्य का उपयोग कर रहे हैं।

नीचे कोड का प्रयास करें: -

import numpy as np 
import cv2 

gray = cv2.imread('lines.jpg') 
edges = cv2.Canny(gray,50,150,apertureSize = 3) 
cv2.imwrite('edges-50-150.jpg',edges) 
minLineLength=100 
lines = cv2.HoughLinesP(image=edges,rho=1,theta=np.pi/180, threshold=100,lines=np.array([]), minLineLength=minLineLength,maxLineGap=80) 

a,b,c = lines.shape 
for i in range(a): 
    cv2.line(gray, (lines[i][0][0], lines[i][0][1]), (lines[i][0][2], lines[i][0][3]), (0, 0, 255), 3, cv2.LINE_AA) 
    cv2.imwrite('houghlines5.jpg',gray) 

ध्यान दें, रो मूल्य, अनुकरणीय मूल्य और maxLineGap में परिवर्तन बाहरी कारकों के कारण कम करने के लिए।

इनपुट छवि Input Image

किनारों छवि Edges Image

आउटपुट छवि Output Image

+0

लाल रेखाओं के बिना छवि को कैसे सहेजना है? मैं सभी लाइनों के बिना छवि रखना चाहता हूं। धन्यवाद – Link

+1

@ लिंक - मुझे यकीन नहीं है कि लाइनों के बिना छवि द्वारा आपका क्या मतलब है। यदि आपको केवल मूल छवि को आउटपुट करने की आवश्यकता है, तो 'cv2.imwrite (' imagename.jpg ', gray)' का उपयोग करें, आटा लाइनों को चित्रित करने से पहले, यानी कमांड 'cv2.line' चलाने से पहले और लूप के बाहर' imwrite' का उपयोग करें। – saurabheights

0

मैं बल्कि इसे एक टिप्पणी के रूप में लिखना होगा लेकिन दुर्भाग्य से मैं नहीं कर सकता। आपको मिनीलाइन लम्बाई और मिनीलाइन गैप बदलना चाहिए। या क्या होगा यदि आपको केवल यह पता चलता है कि आपको केवल लाइनों के साथ लाइनों को प्राप्त करने के लिए सभी लाइनें मिलेंगी और उनके बीच कोणों की जांच करेंगी। मैंने पहले हौफिनिप के साथ काम किया है और यह उपर्युक्त दो तर्कों पर आधारित है। इसके अतिरिक्त, द्विपक्षीय फ़िल्टरिंग का उपयोग करने का प्रयास करें। मैं वास्तव में मदद करता हूं जब मध्य फिल्टर का उपयोग करने में तेजता मदद नहीं करता है।

Bilateral Filter

-1
छवियों में

प्रसंस्करण वे कुछ भूमिकाओं आप फिल्टर के रूप में इस तरह के माध्यम से जाने के पहले आप किनारों का पता लगाने के लिए जाना है, तो आपकी हालत में धूल सिर्फ एक आवाज आप फिल्टर द्वारा दूर करने के लिए है कि है, उपयोग gausse हैं या उसके बाद थ्रेसहोल्डिंग का उपयोग करें और फिर किनारों के लिए और ओपनसीवी में कैनी का उपयोग करें, वे कॉर्नरेक्ट डिटेक्शन हैं जिनका उपयोग आप कर सकते हैं, या अगर आप गलत नहीं हैं तो आप थ्रेसहोल्डिंग के बाद मुख्य बिंदु के लिए जा सकते हैं .. उन चरणों को करने का प्रयास करें और पुनर्विक्रय देखें

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