gpt4 book ai didi

image - 用于自动裁剪的 Opencv 和 python

转载 作者:行者123 更新时间:2023-12-02 05:58:38 28 4
gpt4 key购买 nike

我想自动裁剪图像。

我为此使用 ImageMagick。

我正在使用的命令

 convert  3.jpg  -fuzz 10%  -trim     trim.jpg

enter image description here

enter image description here

我该如何解决 。

我认为正在设置的模糊因子存在问题。

最佳答案

如果你想用 OpenCV 做到这一点,一个好的起点可能是在做一些简单的处理以去除图像中的噪声和小细节之后,你可以找到图像的边缘,然后找到边界框并裁剪到该区域。但是对于您的第二张图像,您可能需要进行一些后期处理,因为原始边缘可能会包含一些噪点和边框。您可以逐个像素地执行此操作,或者另一种可能矫枉过正的方法是找到图像中的所有轮廓并找到最大的边界框。使用它可以得到以下结果:
First Image

对于第二个:

Second Image

需要工作的部分是找到适用于所有图像的适当阈值方法。在这里,我使用了不同的阈值来制作二值图像,因为第一个大部分是白色的,第二个有点暗。第一个猜测是使用平均强度作为线索。

希望这可以帮助!

编辑

这就是我使用一些预处理和动态阈值来使其适用于两个图像的方式:

im = cv2.imread('cloth.jpg')
imgray = cv2.cvtColor(im,cv2.COLOR_BGR2GRAY)
imgray = cv2.blur(imgray,(15,15))
ret,thresh = cv2.threshold(imgray,math.floor(numpy.average(imgray)),255,cv2.THRESH_BINARY_INV)
dilated=cv2.morphologyEx(thresh, cv2.MORPH_OPEN, cv2.getStructuringElement(cv2.MORPH_ELLIPSE,(10,10)))
_,contours,_ = cv2.findContours(dilated,cv2.RETR_LIST,cv2.CHAIN_APPROX_SIMPLE)

我还检查了轮廓区域以删除非常大的轮廓:
new_contours=[]
for c in contours:
if cv2.contourArea(c)<4000000:
new_contours.append(c)

号码 4000000是对图像大小(宽*高)的估计,大轮廓应该有一个接近图像大小的区域。

然后你可以迭代所有的轮廓,并找到整体的边界框:
best_box=[-1,-1,-1,-1]
for c in new_contours:
x,y,w,h = cv2.boundingRect(c)
if best_box[0] < 0:
best_box=[x,y,x+w,y+h]
else:
if x<best_box[0]:
best_box[0]=x
if y<best_box[1]:
best_box[1]=y
if x+w>best_box[2]:
best_box[2]=x+w
if y+h>best_box[3]:
best_box[3]=y+h

然后你就有了 best_box 内所有轮廓的边界框大批。

这是第三张图片的结果:
Third Image

关于image - 用于自动裁剪的 Opencv 和 python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37803903/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com