【发布时间】:2023-03-12 08:40:02
【问题描述】:
我有一些网格形式的图像。我有一个代码可以在网格中找到最大的矩形。然而,它在某些图像中有效,而在其他图像中完全失败,我需要帮助微调代码以在所有情况下工作。理想情况下,我希望轮廓正好在边界上。
代码:
import cv2
import numpy as np
img = cv2.imread('3.jpg')
frame = cv2.resize(img,(1000,500))
hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
lower_red = np.array([0, 10, 120])
upper_red = np.array([15, 255, 255])
mask = cv2.inRange (hsv, lower_red, upper_red)
cv2.imshow("a",mask)
cv2.waitKey(0)
contours, _ = cv2.findContours(mask.copy(),
cv2.RETR_TREE,
cv2.CHAIN_APPROX_SIMPLE)
if len(contours) > 0:
red_area = max(contours, key=cv2.contourArea)
x, y, w, h = cv2.boundingRect(red_area)
cv2.rectangle(frame,(x, y),(x+w, y+h),(0, 0, 255), 2)
cv2.imshow('frame', frame)
cv2.imshow('mask', mask)
cv2.waitKey(0)
正常工作的图片:
代码不起作用的图片:
【问题讨论】:
-
如果所有图像都是这样(黑色图形,浅红色背景),您可能只想在 HSV 遮罩之前放大图像的对比度?
-
@ArohanAjit 预期的输出是没有周围文本的整个心电图??
-
@AKX 我按照你的建议做了,我认为问题在于内部图像的网格线比边框更突出,所以代码只检测内部网格线的最亮部分,而不是整个矩形。
-
是的@Bilal,这是预期的输出,只有心电图区域,没有多余的
标签: python opencv image-processing