c++ - 区分实线和虚线的相关性
问题描述
想弄清楚自动相关是否是区分实线和虚线的好主意。
我得到固定尺寸的图像,由虚线(不同图像中可变频率的间隙)和实线(实线的长度可能不会延伸到整个图像尺寸)组成
起初,我开始收集图像沿其长度的补丁窗口强度,并在浮点的 std::vector 中获得其补丁强度比(每个补丁的总强度/补丁大小 * 255)
考虑使用patch ratio > threshold number作为检测的一种形式。但是,如果遇到没有完全延伸到整个图像长度的实线,这将失败。
有人建议使用自相关来检测是否存在满足阈值的多个峰值(希望我做对了)。现在我在这里有几个问题
- 这种方法真的可行吗?或者可能有其他指标或方法来区分虚线和实线
- 有没有人有代码与 std::vectors 进行自相关?或者可以请我指出一个实现。我正在使用 OpenCV 和 C++
顺便说一句,这是我的形象
解决方案
一种简单的方法是使用虚线比实线具有更少像素的观察结果。使用这些信息,我们可以cv2.countNonZero()
用来确定非零元素的数量。由于您的图像已经被阈值化,因此具有更多像素的图像应该是实线,而具有较少像素的图像应该是虚线。
结果:
(“虚线”,246)
(“固体”,1193)
我的实现是用 Python 实现的,但您可以使用相同的想法轻松地将其转换为 C++
import cv2
dashed = cv2.imread('dashed.png')
dashed = cv2.cvtColor(dashed, cv2.COLOR_BGR2GRAY)
solid = cv2.imread('solid.png')
solid = cv2.cvtColor(solid, cv2.COLOR_BGR2GRAY)
cv2.imshow('dashed', dashed)
cv2.imshow('solid', solid)
dashed_pixels = cv2.countNonZero(dashed)
solid_pixels = cv2.countNonZero(solid)
print('dashed', dashed_pixels)
print('solid', solid_pixels)
cv2.waitKey(0)
推荐阅读
- python - 如何在python中选择然后将相似的csv文件合并到一个文件中?
- ansible - 在 ansible 中获取 Caller Playbook 目录名称
- java - 登录后返回按钮问题,显示确认表单重新提交错误
- python - 如何创建一个案例为间隔的开关案例?
- angular - 带有查询参数的角度路由模块
- perl - 有没有安全运行脚本的方法
- azure-devops - 从哪里获取 Azure Pipeline AppCenterDistribute@3 任务destinationStoreId?
- c# - 来自文件的 C# Stackdriver Trace 凭据
- laravel - laravel 6 调用未定义函数 Facuz\Theme\array_get()
- html - 操作系统错误:没有这样的文件或目录,errno = 2