使用 OpenCV 和 Python 裁剪图像的轮廓
Crop Contures of Image with OpenCV and Python
我正在尝试找出医学图像重要部分的图像大小,如下所示。我正在使用 OpenCV 和 Python。
我必须先裁剪图像以去除图像周围的黑色 space。
这是我的代码:
import cv2
import numpy as np
img = cv2.imread('image-000.png')
height, width, channels = img.shape #shape of original image
height_2 = height * 7/100
width_2 = width * 15/100
img[0:height_2, 0:width_2] = [0, 0, 0] #get rid of the watermark on the top left
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]
height_2, width_2, channels_2 = crop.shape
print "height: " + repr(height_2)
print "width: " + repr(width_2)
cv2.waitKey(0)
cv2.destroyAllWindows()
此代码适用于上图:
然而,当我想对其他图像使用相同的代码时,它不起作用。
例如,这不起作用:
你知道我做错了什么吗?
非常感谢您的帮助!
问题是您在第二张图片中找到了不止 1 个轮廓。只需将您的行 cnt = contours[0]
替换为 cnt = max(contours, key=cv2.contourArea)
即可获得最大的轮廓。
我正在尝试找出医学图像重要部分的图像大小,如下所示。我正在使用 OpenCV 和 Python。
我必须先裁剪图像以去除图像周围的黑色 space。 这是我的代码:
import cv2
import numpy as np
img = cv2.imread('image-000.png')
height, width, channels = img.shape #shape of original image
height_2 = height * 7/100
width_2 = width * 15/100
img[0:height_2, 0:width_2] = [0, 0, 0] #get rid of the watermark on the top left
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]
height_2, width_2, channels_2 = crop.shape
print "height: " + repr(height_2)
print "width: " + repr(width_2)
cv2.waitKey(0)
cv2.destroyAllWindows()
此代码适用于上图:
然而,当我想对其他图像使用相同的代码时,它不起作用。 例如,这不起作用:
你知道我做错了什么吗? 非常感谢您的帮助!
问题是您在第二张图片中找到了不止 1 个轮廓。只需将您的行 cnt = contours[0]
替换为 cnt = max(contours, key=cv2.contourArea)
即可获得最大的轮廓。