python-3.x - Opencv findCountours 函数
问题描述
我正在尝试学习opencv。在网上我发现,用opencv,我可以得到一些图像的轮廓。所以我试过了。这是脚本:
import cv2
import numpy as np
def getC(imagine):
global imgContour
c,h = cv2.findContours(imagine,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_NONE)
for cnt in c:
a = cv2.contourArea(cnt)
print(area)
if area>500:
cv2.drawContour(imgContour,cnt,-1,(255,0,0),3)
img = cv2.imread("a3.jpg")
imgContour = img.copy()
imgG = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
imgB = cv2.GaussianBlur(imgG,(7,7),1)
imgC = cv2.Canny(imgB,50,50)
getC(imgContour)
cv2.imshow("",img)
cv2.imshow("g",imgG)
cv2.imshow("b",imgB)
cv2.imshow("l",imgContour)
cv2.waitKey(0)
我认为全局变量存在问题,格式也存在问题。a3.jpg 就是那个图像。
我现在不知道现在该做什么,以及如何解决这个问题。
谢谢您的帮助
解决方案
- 您将该区域保存为变量
a
,但将其与名称一起使用,area
您可以通过将变量名称更改为来解决此a
问题area
area = cv2.contourArea(cnt)
有错字
cv2.drawContour
你应该这样写cv2.drawContours
cv2.drawContours
方法期望您要绘制的轮廓是列表列表,因此您需要像这样调用它
cv2.drawContours(imgContour,[cnt],-1,(255,0,0),3)
- 当您将图像传递给
getC
方法时,您给了它一个图像,而无需预处理此图像并使用 canny 将其转换为阈值图像,因此您需要像这样调用它
getC(imgC)
最终剧本
import cv2
import numpy as np
def getC(imagine):
global imgContour
print(imgContour.shape)
c,h = cv2.findContours(imagine,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_NONE)
for cnt in c:
area = cv2.contourArea(cnt)
print(area)
if area>500:
cv2.drawContours(imgContour,[cnt],-1,(255,0,0),3)
img = cv2.imread("./a3.jpg")
imgContour = img.copy()
imgG = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
imgB = cv2.GaussianBlur(imgG,(7,7),1)
imgC = cv2.Canny(imgB,50,50)
getC(imgC)
cv2.imshow("",img)
cv2.imshow("g",imgG)
cv2.imshow("b",imgB)
cv2.imshow("l",imgContour)
cv2.waitKey(0)
推荐阅读
- javascript - 让javascript选择所有元素,而不仅仅是第一个
- python - NameError:名称'pycrfsuite'未定义
- php - 如何添加功能,以便同一城市的司机用户角色可以看到 woocommerce 订单?
- github - 如何使用markdown在github中创建orderlist
- python - 如果初始化不正确,删除对python中对象的引用?
- java - 使用 Spring Boot 和 JPA/Hibernate 连接到 SQL Server
- design-patterns - 如何确保轮询过程的冗余
- c - 理解问题,为什么这两个程序分别需要 3 和 6 秒
- windows - 在 Windows 10 中禁用所有音频设备的独占模式
- python-3.x - 如何对 QComboBox 中的文本执行字母间距?