使用 openCV 裁剪简单的边界框
Crop simple bounding box with openCV
我有一些黑色背景的图片和角落里的一些文字:
我正在尝试进行矩形裁剪,使其看起来像:
两侧的文字以及 window 尺寸大小不一。我的代码没有正确裁剪,我做错了什么?
我试过先去掉右下角的文字再裁剪,还是不行。
def crop_cont(img):
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
_,thresh = cv2.threshold(gray,15,255,cv2.THRESH_BINARY)
_, contours, _= cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
cnt = contours[0]
x,y,w,h = cv2.boundingRect(cnt)
crop = img[y:y+h,x:x+w]
return crop
您的代码总体上没问题。问题是您正在使用轮廓[0]。你必须找到正确的轮廓(有不止一个)。在此特定示例中,正确的轮廓是最大的轮廓。只需遍历所有找到的轮廓并找到面积最大的轮廓即可。
我有一些黑色背景的图片和角落里的一些文字:
我正在尝试进行矩形裁剪,使其看起来像:
两侧的文字以及 window 尺寸大小不一。我的代码没有正确裁剪,我做错了什么?
我试过先去掉右下角的文字再裁剪,还是不行。
def crop_cont(img):
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
_,thresh = cv2.threshold(gray,15,255,cv2.THRESH_BINARY)
_, contours, _= cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
cnt = contours[0]
x,y,w,h = cv2.boundingRect(cnt)
crop = img[y:y+h,x:x+w]
return crop
您的代码总体上没问题。问题是您正在使用轮廓[0]。你必须找到正确的轮廓(有不止一个)。在此特定示例中,正确的轮廓是最大的轮廓。只需遍历所有找到的轮廓并找到面积最大的轮廓即可。