如何在Python OpenCV中裁剪围绕框的图像?

3

我正在编写一个在OpenCV中裁剪矩形周围图像的程序。请问如何实现?我还需要将多个矩形转换为裁剪后的图像。

我尝试使用了这篇教程:https://www.pyimagesearch.com/2016/02/08/opencv-shape-detection/,但我不知道如何获取形状的边界并在其周围裁剪。

我希望得到多个图片的输出,这些图片包含三角形内容的图像。

谢谢!


你能附上样例输入和期望输出吗? - ZdaR
@Reece365,我在自己的项目中遇到了同样的问题,所以我分享了我的解决方案,希望能帮到你! - Adam Jaamour
2个回答

1
我最近为我的一个项目完成了这个操作,它完美地工作了。
以下是我在Python OpenCV中使用的技术:
  • 使用OpenCV的cv2.imshow()函数显示图像。
  • 在图像上选择2个点(x, y)。可以通过使用OpenCV捕获鼠标单击事件来完成此操作。一种方法是在第一个点处单击鼠标,同时向第二个点移动,当光标位于正确点时释放鼠标单击即可。在OpenCV中,您可以使用cv2.EVENT_LBUTTONDOWNcv2.EVENT_LBUTTONUP来完成此操作。您可以编写一个函数来记录使用鼠标捕获事件的两个点,并将其传递给cv2.setMouseCallback()
  • 一旦您有了2个坐标,就可以使用OpenCV的cv2.rectangle()函数绘制矩形,在其中可以传递图像、2个点和其他参数,如要绘制的矩形的颜色。
  • 如果您对这些结果满意,可以使用类似以下内容的东西裁剪结果:
image = cv2.imread("path_to_image")
cv2.setMouseCallback("image", your_callback_function)
cropped_img = image[points[0][1]:points[1][1], points[0][0]:points[1][0]]
cv2.imshow("Cropped Image", cropped_img)
cv2.waitKey(0)

以下是我在其中一张图片上得到的结果之一。

Before (原始图像): before

用矩形框选择感兴趣区域: roi selected

After (裁剪后的图像): after

我开始是按照这个优秀的教程实现它,然后再自己进一步改进,所以你可以从这里开始:使用Python和OpenCV捕获鼠标单击事件。您还应该阅读所附教程底部的评论,以轻松改进代码。


0

您可以使用“BoundedRect”函数获取框的坐标。然后使用切片操作,提取所需图像的部分。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接