cv2.lines()或任何其他绘图函数会影响其上方的图像吗?

时间:2019-02-08 07:39:47

标签: python opencv image-processing

这段代码在while循环内,我期望看到的图像上没有线条,因为将行应用于img_roi而不是img_clone,但是在输出图像中得到的是上面有线条的图像。

另外,我想检测是否有人可以提供帮助,这会很棒。谢谢。

ret, img_color = vid.read()

num_rows, num_cols = img_color.shape[:2]
rotation_matrix = cv2.getRotationMatrix2D((num_cols/2, num_rows/2), 270, 0.56)  #3
img_rotated = cv2.warpAffine(img_color, rotation_matrix, (num_cols, num_rows))


height, width = img_rotated.shape[:2]
img_resize = cv2.resize(img_rotated,(int(0.8*width), int(0.8*height)), interpolation = cv2.INTER_CUBIC) #2

img_roi = img_resize[10:842,530:1000]
img_clone = img_resize[10:842,530:1000]

img_gray = cv2.cvtColor(img_roi,cv2.COLOR_BGR2GRAY) #1

img_canny = cv2.Canny(img_gray,330,350, apertureSize = 3)   #4

lines = cv2.HoughLinesP(img_canny, 1, np.pi/180, 60, maxLineGap = 240)

for line in lines:
    x1,y1,x2,y2 = line[0]
    cv2.line(img_roi, (x1,y1), (x2,y2), (0,255,0), 3)


cv2.imshow('frame',img_clone)
cv2.imwrite('image.jpg', img_clone)

Output of image

1 个答案:

答案 0 :(得分:0)

基本上img_roiimg_clone都引用相同的numpy数组img_resize。当然,不是整个img_resize,而是整个切片。如果您在行的末尾(创建行之后)显示img_resize,可以看到行仅应用于子图像,则可以完成此操作。

您可以在其他地方引用here进行解释。

对我来说,最简单的方法是在要与其余部分分开的数组末尾添加.copy()。对于您的情况img_clone

img_clone = img_resize[10:842,530:1000].copy()

这将创建一个独立的numpy数组,并将其作为原始图像。