仅绘制点而不使用drawContours() opencv python连接它们

pra*_*kar 1 python opencv

尝试获取图像 B,如下所示,但下面的代码给出图像 A [遵循 https://pyimagesearch.com/2021/10/06/opencv-contour-approximation/ 的教程]。mask 指的是绿色区域。

cnts = cv2.findContours(mask.copy(), mode=cv2.RETR_EXTERNAL, method=cv2.CHAIN_APPROX_SIMPLE)


cnts = imutils.grab_contours(cnts)
c = max(cnts, key=cv2.contourArea)


eps = 0.001 


peri = cv2.arcLength(c, True)
approx = cv2.approxPolyDP(c, eps * peri, True)

#here np.array of shape [4,1,2] is got.
  
output = mask.copy()
cv2.drawContours(output, [approx], -1, (0, 255, 0), 3)
(x, y, w, h) = cv2.boundingRect(c)


cv2.putText(output, text, (x, y - 15), cv2.FONT_HERSHEY_SIMPLEX,0.9, (0, 255, 0), 2)
cv2.imshow("Approximated Contour", output)
cv2.waitKey(0)]
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

如何获得图像B?我认为 drawContours() 不应该用线连接点,但不知道如何获得它。Opencv链接https://docs.opencv.org/3.4/d4/d73/tutorial_py_contours_begin.html不显示获取图像B的代码

toy*_*pra 5

尝试这个:

import numpy as np
import cv2

img = cv2.imread('corner.jpg')
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
gray = np.float32(gray)

corners = cv2.goodFeaturesToTrack(gray, 100, 0.01, 10)
corners = np.int0(corners)

for corner in corners:
    x,y = corner.ravel()
    cv2.circle(img,(x,y),3,255,-1)
    
cv2.imshow('Corner',img)
cv2.waitKey(0)
Run Code Online (Sandbox Code Playgroud)