gpt4 book ai didi

python - OpenCV - 如何找到圆角矩形的矩形轮廓?

转载 作者:太空狗 更新时间:2023-10-29 20:40:21 34 4
gpt4 key购买 nike

我正在尝试在图像中查找具有圆角的矩形对象的轮廓。我尝试了 HoughLinesPfindContours,但没有达到预期的结果。

results

我想找到这样的矩形: desired result

代码:

import cv2
import matplotlib.pyplot as plt
import util

image = cv2.imread("./img/findrect0.png", 1)
gray = util.grayImage(image)

edges = cv2.Canny(image, 50, 200)
lines = cv2.HoughLinesP(edges, 1, cv2.cv.CV_PI/180, 50, minLineLength=50, maxLineGap=10)[0]
linesImage = image.copy()
util.drawLines(linesImage, lines, thickness=10)

contoursImage = image.copy()
(contours, hierarchy) = cv2.findContours(gray.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

util.drawContours(contoursImage, contours, thickness=10)

util.showOpenCVImagesGrid([image, edges, linesImage, contoursImage], 2, 2, titles=["original image", "canny image", "lines image", "contours image"])

工具:

import cv2
import math
import matplotlib.pyplot as plt

def showOpenCVImagesGrid(images, x, y, titles=None, axis="on"):
fig = plt.figure()
i = 1
for image in images:
copy = image.copy()
channel = len(copy.shape)
cmap = None
if channel == 2:
cmap = "gray"
elif channel == 3:
copy = cv2.cvtColor(copy, cv2.COLOR_BGR2RGB)
elif channel == 4:
copy = cv2.cvtColor(copy, cv2.COLOR_BGRA2RGBA)

fig.add_subplot(x, y, i)
if titles is not None:
plt.title(titles[i-1])
plt.axis(axis)
plt.imshow(copy, cmap=cmap)
i += 1
plt.show()


def grayImage(image):
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
return gray


def drawLines(image, lines, thickness=1):
for line in lines:
# print("line="+str(line))
cv2.line(image, (line[0], line[1]), (line[2], line[3]),
(0, 0, 255), thickness)


def drawContours(image, contours, thickness=1):
i = 0
for contour in contours:
cv2.drawContours(image, [contours[i]], i, (0, 255, 0), thickness)
area = cv2.contourArea(contour)
i += 1

我正在使用 Python 2.7.13OpenCV 2.4.13.3

我一直在考虑延长这些线并获得线的交点。最后,我将得到矩形的四个坐标。但是如果图片比较复杂,就不知道怎么处理了。

最佳答案

您需要找到找到的轮廓的边界矩形。

img = cv2.imread("image.png", -1)

gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

binary = cv2.bitwise_not(gray)

(_,contours,_) = cv2.findContours(binary, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)

for contour in contours:
(x,y,w,h) = cv2.boundingRect(contour)
cv2.rectangle(img, (x,y), (x+w,y+h), (0,255,0), 2)

result

关于python - OpenCV - 如何找到圆角矩形的矩形轮廓?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46486078/

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