【问题标题】:Make an image contour black and white using open CV and Python使用 Open CV 和 Python 制作黑白图像轮廓
【发布时间】:2016-09-22 23:07:56
【问题描述】:

我正在尝试使用 OpenCV2 和 Python3 将图像的一部分绘制为黑白。这是我正在尝试的代码:

(x, y, w, h) = cv2.boundingRect(c)
cv2.rectangle(frame, (x,y), (x+w,y+h),0,0)
sub_face = frame[y:y+h, x:x+w]
# apply a gaussian blur on this new recangle image
# sub_face = cv2.GaussianBlur(sub_face,(9, 9), 30, borderType = 0)
sub_face = cv2.cvtColor(sub_face, cv2.COLOR_BGR2GRAY)

# merge this blurry rectangle to our final image
result_frame[y:y+sub_face.shape[0], x:x+sub_face.shape[1]] = sub_face

当我应用 GaussianBlur 方法时,它可以正常工作,但是当我尝试 cvtColor 方法时,它失败并显示一条消息(在最后一行):无法将输入数组从形状 (268,182) 广播到形状 (268,182,3) .我做错了什么?

第一行中的 c 变量是一个轮廓(来自运动检测)。

我是 Python 和 OpenCV 的新手。

谢谢!

【问题讨论】:

    标签: python opencv image-processing


    【解决方案1】:

    您正在尝试将由您的cv2.cvtColor 调用产生的单个通道同时分配给三个通道,因为result_frame 是一个 RGB / 三通道图像。您可能希望将单个通道分配给所有三个通道。一种干净利落的方法是利用NumPy broadcasting,通过在三维创建一个单例通道,然后在所有通道上广播结果。由于您使用的是 OpenCV 的 cv2 接口,因此用于处理图像的本机数据类型是 NumPy 数组:

    # merge this blurry rectangle to our final image
    result_frame[y:y+sub_face.shape[0], x:x+sub_face.shape[1]] = sub_face[:,:,None]
    

    此上下文中的: 操作访问特定维度中的所有值。在这种情况下,我们需要第一维和第二维。因此,sub_face[:,:,None] 将使您的单通道图像成为 3D,其中第三维是单例(即 1)。然后,使用 NumPy 广播将把这个单通道图像同时广播到所有通道。

    请注意,在分配给result_frame 时,我不必显式访问第三维。这是因为result_frame[y:y+sub_face.shape[0], x:x+sub_face.shape[1]]result_frame[y:y+sub_face.shape[0], x:x+sub_face.shape[1],:] 与在您指定的最后一个维度隐式假定: 之后删除索引相同。

    【讨论】:

      【解决方案2】:

      您将 sub_face 转换为单通道图像,但 result_frame 是 3 通道图像。

      在最后一行中,您尝试将单个通道数组分配给 3 通道切片。

      你可以这样做:

      result_frame[y:y+sub_face.shape[0], x:x+sub_face.shape[1], 0] = sub_face
      result_frame[y:y+sub_face.shape[0], x:x+sub_face.shape[1], 1] = sub_face
      result_frame[y:y+sub_face.shape[0], x:x+sub_face.shape[1], 2] = sub_face
      

      【讨论】:

      • 是的,这就是我从错误消息中得出的结论 :) 但是,我是 Python 和 OpenCV 的新手,所以不知道该怎么做。
      猜你喜欢
      • 1970-01-01
      • 2022-12-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-14
      • 1970-01-01
      相关资源
      最近更新 更多