【发布时间】:2021-05-21 19:28:02
【问题描述】:
我正在尝试制作一个脚本,我可以在其中绘制图像中每个形状的轮廓,这在某些情况下有效,但当形状的颜色有些退化时会失败。它旨在绘制形状的轮廓(在这种情况下为矩形),但无法绘制整个矩形,并且还在内部添加了一些误报点。有没有一种方法可以降低脚本的敏感性或其他可以帮助我实现这一目标的工具?
from __future__ import print_function
import os
import imutils
import cv2
from PIL import Image
import numpy as np
print("OpenCV Version: {}".format(cv2.__version__))
image = cv2.imread("input.png")
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
thresh = cv2.threshold(gray, 225, 255, cv2.THRESH_BINARY_INV)[1]
if imutils.is_cv2() or imutils.is_cv4():
(cnts, _) = cv2.findContours(thresh.copy(), cv2.RETR_EXTERNAL,
cv2.CHAIN_APPROX_NONE)
elif imutils.is_cv3():
(_, cnts, _) = cv2.findContours(thresh.copy(), cv2.RETR_EXTERNAL,
cv2.CHAIN_APPROX_NONE)
cv2.drawContours(image, cnts, -1, (50, 50, 50),24)
RGBimage = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
PILimage = Image.fromarray(RGBimage)
PILimage.save('output.png', dpi=(300,300))
【问题讨论】:
-
你能把原图也贴出来吗?我想试试你的代码。我正在努力学习枕头
-
不知道 findcontours 是如何工作的,你能以同样的方式变换你的图像,使其只有两种颜色吗? tha docs说轮廓可以简单地解释为连接所有连续点(沿边界)的曲线,具有相同的颜色或强度。轮廓是形状分析和对象检测和识别的有用工具。为了获得更好的准确性,请使用二值图像。所以在寻找轮廓之前,应用阈值或精确边缘检测。
-
更改阈值
-
@lorelayb 您好,使用您的代码和ibb.co/19Hh0kb 作为输入我得到ibb.co/zZkS5TX 作为输出,因此您的代码似乎可以工作。使用您上传的输入将输入图像作为输出返回,不确定它是否与 countur 发现白色超过黑色作为计数有关
标签: python opencv image-processing opencv-contour opencv-drawcontour