why this code loop forever after a draw a rectangle

meInvent bbird jobmattcon at gmail.com
Fri Sep 16 08:18:27 EDT 2016


i follow this post to give some time it to operate,
wait a long time still looping

http://answers.opencv.org/question/60094/libpng-warning-image-width-is-zero-in-ihdr/


i can not stand this Ninja coding life any more,
i have to open my code for ask this error


import cv2
import numpy as np
#from matplotlib import pyplot as plt
import time

#print("1=" + str(int(sys.argv[1])))
#print("2=" + str(int(sys.argv[2])))
#print("3=" + str(int(sys.argv[3])))

img_rgb = cv2.imread(r'C:\Users\martin\Documents\scree2.png')
img_gray = cv2.cvtColor(img_rgb, cv2.COLOR_BGR2GRAY)
template = cv2.imread(r'C:\Users\martin\Documents\dragob.png',0)
w, h = template.shape[::-1]

res = cv2.matchTemplate(img_gray,template,cv2.TM_CCOEFF_NORMED)
threshold = 0.64
    
loc = np.where( res >= threshold)
pt = [(0,0)]
    
while not zip(*loc[::-1]):
    threshold = threshold - 0.02
    loc = np.where( res >= threshold)

counter = 1
print("threshold="+str(threshold))   
for pt2 in zip(*loc[::-1]):
    cv2.rectangle(img_rgb, pt2, (pt2[0] + w, pt2[1] + h), (0,0,255), 2)
    pt = pt2
    crop_img = img_rgb[pt[1]:(pt[1]+h), pt[0]:(pt[0]+w)]
    counter = counter + 1

cv2.imwrite("C:\\Users\\tester\\Documents\\res.png",crop_img)


#import cv2
#winName = "Movement Indicator"
#cv2.namedWindow(winName, cv2.WINDOW_NORMAL)
img = cv2.imread(r'C:\Users\tester\Documents\res.png',1)
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
height, width = gray.shape
edges = cv2.Canny(gray,height,width,apertureSize = 3)
#edges = cv2.Canny(gray,30,200)

#gray = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)
#ret,thresh = cv2.threshold(edges.copy(),cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE,0)
ret,thresh = cv2.threshold(edges,250,150,0)
contours,hierarchy = cv2.findContours(thresh, 1, 2)
#contours = sorted(contours, key = cv2.contourArea, reverse = True)[:10]

im = img.copy()
cntcounter = 0
for cnt in contours:
        epsilon = 0.1*cv2.arcLength(cnt,True)
        approx = cv2.approxPolyDP(cnt,epsilon,True)	
        #peri = cv2.arcLength(cnt, True)
        #approx = cv2.approxPolyDP(c, 0.5 * peri, True)
        #print("len(approx)="+str(len(approx)))
        if len(approx) == 4:
            print("approx=" + str(approx))
            cntcounter = cntcounter + 1
            print("here1")
            x,y,w,h = cv2.boundingRect(cnt)
            print("here2")
            #im = img.copy()
            while im is None:
                time.sleep(1)
            if im is not None:                
                print("here3")
                im = cv2.rectangle(im.copy(), (x,y), (x+w, y+h), (0,255,0), 2) 
                #cv2.imwrite("C:\\Users\\martin\\Documents\\masda"+str(cntcounter)+".png",imi)                
                #im = cv2.line(im,(x,y),(x+w,y),(0,255,0),2)
                #im = cv2.line(im,(x+w,y),(x+w,y+h),(0,255,0),2)
                #im = cv2.line(im,(x,y+h),(x+w,y+h),(0,255,0),2)
                #im = cv2.line(im,(x,y),(x,y+h),(0,255,0),2)








On Friday, September 16, 2016 at 7:34:04 PM UTC+8, Waffle wrote:
> On 16 September 2016 at 14:24, meInvent bbird <jobmattcon at gmail.com> wrote:
> > im = img.copy()
> > cntcounter = 0
> > for cnt in contours:
> >         epsilon = 0.1*cv2.arcLength(cnt,True)
> >         approx = cv2.approxPolyDP(cnt,epsilon,True)
> >         #peri = cv2.arcLength(cnt, True)
> >         #approx = cv2.approxPolyDP(c, 0.5 * peri, True)
> >         #print("len(approx)="+str(len(approx)))
> >         if len(approx) == 4:
> >             print("approx=" + str(approx))
> >             cntcounter = cntcounter + 1
> >             print("here1")
> >             x,y,w,h = cv2.boundingRect(cnt)
> >             print("here2")
> >             while im is None:
> >                 time.sleep(1)
> >             if im is not None:
> >                 print("here3")
> >                 im = cv2.rectangle(im.copy(), (x,y), (x+w, y+h), (0,255,0), 2)
> >                 #im = cv2.line(im,(x,y),(x+w,y),(0,255,0),2)
> >                 #im = cv2.line(im,(x+w,y),(x+w,y+h),(0,255,0),2)
> >                 #im = cv2.line(im,(x,y+h),(x+w,y+h),(0,255,0),2)
> >                 #im = cv2.line(im,(x,y),(x,y+h),(0,255,0),2)
> >
> >
> > cv2.imwrite(r'C:\Users\tester\Documents\masda.png',im)
> > --
> > https://mail.python.org/mailman/listinfo/python-list
> 
> not sure but..  this bit reads really suspicious:
> 
>             while im is None:
>                 time.sleep(1)
> 
> if im is ever None then how will it ever become not None? unless there
> is some other thread at work i can't really see this happening.
> and if there is some other thread at work then there is probably some
> better solution than sleep()








More information about the Python-list mailing list