问题遇到的现象和发生背景
opencv python截取图像部分区域,发现截取后的矩阵的列数为0,截取的范围没有超过图像的范围。
并非是所有的都是0,当x+w超过450左右的时候就会出现这种情况。
问题相关代码,请勿粘贴截图
for cnt in contours:
x,y,w,h=cv2.boundingRect(cnt)
tmp3=frame.copy()
if x>0 and x+w<640 and w*h>300:
c=c+1
rest=cv2.rectangle(frame,(x,y),(x+w,y+h),(0,255,0),2)
rest1=cv2.rectangle(opening,(x,y),(x+w,y+h),(255,255,255),1)
rest2=cv2.rectangle(opening1,(x,y),(x+w,y+h),(255,255,255),1)
gray = cv2.cvtColor(rest, cv2.COLOR_BGR2GRAY)
img_cut = frame[x:(x + w), y:(y + h)]
print("img_cut的shape是",np.shape(img_cut))
print("w*h=",w*h)
print("x:",x,"x+w:",x+w)
print("w:",w,"h:",h)
img_cut = frame[x:(x + w), y:(y + h)]
print("img_cut的shape是",np.shape(img_cut))
print("w*h=",w*h)
print("x:",x,"x+w:",x+w)
print("w:",w,"h:",h)
运行结果及报错内容
img_cut的shape是 (0, 103, 3)
w*h= 15759
x: 482 x+w: 635
w: 153 h: 103
img_cut的shape是 (0, 15, 3)
w*h= 390
x: 462 x+w: 488
w: 26 h: 15
img_cut的shape是 (0, 40, 3)
w*h= 2680
x: 390 x+w: 457
w: 67 h: 40
img_cut的shape是 (0, 50, 3)
w*h= 5150
x: 384 x+w: 487
w: 103 h: 50
还有一些不为零的:
img_cut的shape是 (16, 23, 3)
wh= 368
x: 193 x+w: 209
w: 16 h: 23
img_cut的shape是 (85, 32, 3)
wh= 2720
x: 149 x+w: 234
w: 85 h: 32
img_cut的shape是 (72, 21, 3)
wh= 1512
x: 111 x+w: 183
w: 72 h: 21
img_cut的shape是 (204, 77, 3)
wh= 15708
x: 133 x+w: 337
w: 204 h: 77