- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我刚刚开始使用 OpenCV,我发现了 contourArea 函数的一些非常奇怪的行为。
看到这张图片。
它有三个不相连的区域,左侧是一组长笔划,顶部中心有一个点,最后是右侧的一个大方块。
当我运行我的函数时,我得到了这个结果
Contour[0] Area: 221, Length: 70, Colour: Red
Contour[1] Area: 13772, Length: 480, Colour: Green
Contour[2] Area: 150, Length: 2370, Colour: Blue
Square Area
width = 118
height = 116
118 * 116 = 13,688
Dot Area
width = 27
height = 6
27*6 = 162
Contour[0] Area: 1805, Length: 423, Colour: Red
Contour[1] Area: 947, Length: 227, Colour: Green
Contour[2] Area: 1825, Length: 415, Colour: Blue
def contour_test(name):
import cv2 as cv
colours = [{'name': 'Red ', 'bgr': (0, 0, 255)},
{'name': 'Green ', 'bgr': (0, 255, 0)},
{'name': 'Blue ', 'bgr': (255, 0, 0)}]
src = cv.imread(cv.samples.findFile(name))
src_gray = cv.cvtColor(src, cv.COLOR_BGR2GRAY)
src_gray = cv.blur(src_gray, (3,3))
threshold = 100
canny_output = cv.Canny(src_gray, threshold, threshold * 2)
contours, _ = cv.findContours(canny_output, cv.RETR_EXTERNAL, cv.CHAIN_APPROX_SIMPLE)
# Get the moments
mu = [None for i in contours]
for i in range(len(contours)):
mu[i] = cv.moments(contours[i])
# Get the mass centers
mc = [None for i in contours]
for i in range(len(contours)):
mc[i] = (mu[i]['m10'] / (mu[i]['m00'] + 1e-5), mu[i]['m01'] / (mu[i]['m00'] + 1e-5))
# Draw contours
drawing = np.zeros((canny_output.shape[0], canny_output.shape[1], 3), dtype=np.uint8)
for i, j in enumerate(contours):
colour = colours[i]['bgr']
cv.drawContours(drawing, contours, i, colour, 2)
area = int(cv.contourArea(contours[i]))
length = int(cv.arcLength(contours[i], True))
print('Contour[{0}] Area: {1}, Length: {2}, Colour: {3}'.format(i, area, length, colours[i]['name']))
最佳答案
内部轮廓findContours
发现应该充满 白色颜色。
cv.Canny
之前 findContours
( cv.blur
也不是必需的)。 cv.threshold
与 cv.THRESH_BINARY_INV
用于反转极性的选项。cv.THRESH_OTSU
自动阈值选项。 cv.blur
和
cv.Canny
和
cv.findContours(canny_output...
和:
_, src_thresh = cv.threshold(src_gray, 0, 255, cv.THRESH_BINARY_INV + cv.THRESH_OTSU)
contours, _ = cv.findContours(src_thresh, cv.RETR_EXTERNAL, cv.CHAIN_APPROX_SIMPLE)
Contour[0] Area: 13531, Length: 476, Colour: Red
Contour[1] Area: 184, Length: 71, Colour: Green
Contour[2] Area: 4321, Length: 1202, Colour: Blue
import numpy as np
def contour_test(name):
import cv2 as cv
colours = [{'name': 'Red ', 'bgr': (0, 0, 255)},
{'name': 'Green ', 'bgr': (0, 255, 0)},
{'name': 'Blue ', 'bgr': (255, 0, 0)}]
src = cv.imread(cv.samples.findFile(name))
src_gray = cv.cvtColor(src, cv.COLOR_BGR2GRAY)
#src_gray = cv.blur(src_gray, (3,3))
#threshold = 100
#canny_output = cv.Canny(src_gray, threshold, threshold * 2)
#contours, _ = cv.findContours(canny_output, cv.RETR_EXTERNAL, cv.CHAIN_APPROX_SIMPLE)
_, src_thresh = cv.threshold(src_gray, 0, 255, cv.THRESH_BINARY_INV + cv.THRESH_OTSU)
cv.imshow('src_thresh', src_thresh);cv.waitKey(0);cv.destroyAllWindows() # Show src_thresh for testing
contours, _ = cv.findContours(src_thresh, cv.RETR_EXTERNAL, cv.CHAIN_APPROX_SIMPLE)
# Get the moments
mu = [None for i in contours]
for i in range(len(contours)):
mu[i] = cv.moments(contours[i])
# Get the mass centers
mc = [None for i in contours]
for i in range(len(contours)):
mc[i] = (mu[i]['m10'] / (mu[i]['m00'] + 1e-5), mu[i]['m01'] / (mu[i]['m00'] + 1e-5))
# Draw contours
drawing = np.zeros((src_thresh.shape[0], src_thresh.shape[1], 3), dtype=np.uint8)
for i, j in enumerate(contours):
colour = colours[i]['bgr']
cv.drawContours(drawing, contours, i, colour, 2)
area = int(cv.contourArea(contours[i]))
length = int(cv.arcLength(contours[i], True))
print('Contour[{0}] Area: {1}, Length: {2}, Colour: {3}'.format(i, area, length, colours[i]['name']))
cv.imshow('drawing', drawing);cv.waitKey(0);cv.destroyAllWindows() # Show drawing for testing
contour_test('img.jpg')
cv.imshow
在两个地方进行测试。
关于python - 开放式 CV 轮廓面积计算错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61074714/
我在将示例 laravel 5.2 应用程序部署到 openshift 时遇到问题。我找到了这个quickstart在 github 上并尝试了下面列出的手动安装。 rhc app create la
我刚刚开始使用 OpenCV,我发现了 contourArea 函数的一些非常奇怪的行为。 看到这张图片。 它有三个不相连的区域,左侧是一组长笔划,顶部中心有一个点,最后是右侧的一个大方块。 当我运行
我经常发现自己尝试从数值变量+用户提供的一组范围创建分类变量。 例如,假设我有一个带有数值变量 df$V 的 data.frame并想创建一个新变量 df$VCAT这样: df$VCAT = 0 如果
启动 MXBean 时,我收到错误提示 Method SampleServiceMXBean.register 具有无法转换为开放类型的参数或返回类型。根据错误消息,很明显我的 MXBean 无法 c
大多数时候在 CUDA 或 OpenCL 程序中需要分支,例如: for (int i=0; i
我们有一个可能有用的自制框架实现基于 REST 的网络服务。 这是一个 .net c# 项目,用于 web 应用程序。 它的用途是:用动态内容内联替换模板“标签”。示例标签:{{recentposts
是否有 Java 中 SMB/CIFS 服务器的开放实现?我能找到的唯一实现是 Alfresco 的,但它不是开源的。 一个相关的问题:假设没有这样的实现,我很惊讶没有一个库提供甚至是 SMB 的一个
我已将我的应用程序从本地主机移至 OpenShift,发现 PostgreSQL 连接存在问题。我已经配置了pom.xml: org.postgresql postgresql
我正在尝试在 AWS ec2 实例上配置 SSL 证书,我遵循了以下步骤: 使用 ubuntu 操作系统在 ec2 上创建实例。 通过证书管理器在我的域上颁发证书 -> 例如:*.domains.co
我正在尝试在打开的模式上执行 jQuery 脚本,以便将其中一个字段转换为 jQuery UI Spinner。 我正在使用Angular UI中记录的opened promise 。 问题:jQue
有没有办法将服务帐户 secret 内容填充到环境变量中? 示例:当一个 pod 启动时,它包含一个 /var/run/secrets/kubernetes.io/secrets/serviceacc
我在 security 和 components/securitySchemes 中定义了我的身份验证。在Swagger documentation about response ,他们提供了这个例子
我是一名优秀的程序员,十分优秀!