python - 我怎样才能只得到旋转矩形的四个角?

标签 python opencv

我正在使用此代码来检测矩形的四个角,但是由于像素波,我得到了下面的输出,这意味着我得到了很多点,我怎么只能得到四个角(topRight,topLeft,bottomRight,bottomLeft)而没有所有像素波?

注意我正在将opencv与python一起使用

hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
low_red1 = np.array([0,70,25])
high_red1 = np.array([10,255,255])

low_red2 = np.array([160,70,25])
high_red2 = np.array([180,255,255])

mask0 = cv2.inRange(hsv, low_red1, high_red1)
mask1 = cv2.inRange(hsv, low_red2, high_red2)
mask = mask0+mask1
cv2.imshow("mask", mask)

contours,_ = cv2.findContours(mask, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
cv2.drawContours(img, contours, -1, (0,200,0),1)

for c in contours:
    approx = cv2.approxPolyDP(c, 0.009 * cv2.arcLength(c, True), True)    
    cv2.drawContours(img, [approx], 0, (255, 0, 0), 1)
    n = approx.ravel()
    k = 0
    for j in n :
        if(k % 2 == 0):
            x = n[k]
            y = n[k + 1]
            cv2.circle(img, (x,y), 3, (255, 0, 0), -1)    
        k = k+1

cv2.imshow("corners", img)

the output

最佳答案

除非Rectagle与uv轴完全对齐(可以检查),否则拐角始终是max()min()坐标上的各个uv值。

关于python - 我怎样才能只得到旋转矩形的四个角?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62454734/

相关文章:

python - 从 python 中的列表和字典嵌套中删除任意元素

python - 将变音符号或修饰符变音符号 Unicode 字符转换为 'combining form'

python - 图像旋转后像素值改变

python - 我怎样才能用这个结构做到这一点?

python - 从扫描图像中删除网格

c++ - .ppm 图像使用 opencv 保存不正确

python - 在 matplotlib 中将日期时间对象列表绘制为折线图

c++ - 在 OpenCV 中显式复制像素值时出现空白帧

python - 如何在模板匹配中使用 cv2.minMaxLoc()

opencv - 对于什么样的应用程序,我可以使用 beagleboard 的 dsp 核心?我可以将 DSP 加速用于背景减法算法吗?