opencv几何形状提取

  • 几何形状识别(识别三角形、四边形/矩形、多边形、圆)
  • 计算几何形状面积与周长、中心位置
  • 提取几何形状的颜色

在具体代码实现与程序演示之前,我们先要搞清楚一些概念。

一:基本概念与函数介绍

1. 轮廓(contours)

什么是轮廓,简单说轮廓就是一些列点相连组成形状、它们拥有同样的颜色、轮廓发现在图像的对象分析、对象检测等方面是非常有用的工具,在OpenCV中使用轮廓发现相关函数时候要求输入图像是二值图像,这样便于轮廓提取、边缘提取等操作。轮廓发现的函数与参数解释如下:

findContours(image, mode, method, contours=None, hierarchy=None, offset=None)
- image输入/输出的二值图像
- mode 迒回轮廓的结构、可以是List、Tree、External
- method 轮廓点的编码方式,基本是基于链式编码
- contours 迒回的轮廓集合
- hieracrchy 迒回的轮廓层次关系
- offset 点是否有位移

2. 多边形逼近
多边形逼近,是通过对轮廓外形无限逼近,删除非关键点、得到轮廓的关键点,不断逼近轮廓真实形状的方法,OpenCV中多边形逼近的函数与参数解释如下:

approxPolyDP(curve, epsilon, closed, approxCurve=None)
- curve 表示输入的轮廓点集合
- epsilon 表示逼近曲率,越小表示相似逼近越厉害
- close 是否闭合

3. 几何距计算
图像几何距是图像的几何特征,高阶几何距中心化之后具有特征不变性,可以产
生Hu距输出,用于形状匹配等操作,这里我们通过计算一阶几何距得到指定轮廓的中心位置,计算几何距的函数与参数解释如下:

moments(array, binaryImage=None)
- array表示指定输入轮廓
- binaryImage默认为None

二:代码实现与演示

整个代码实现分为如下几步完成

  1. 加载图像,
  2. 图像二值化
  3. 轮廓发现
  4. 几何形状识别
  5. 测量周长、面积、计算中心
  6. 颜色提取
    完整的源代码如下:
####################################################
#   作者:zhigang,
####################################################
import cv2 as cv
import numpy as np

class ShapeAnalysis:
    def __init__(self):
        self.shapes = {'triangle': 0, 'rectangle': 0, 'polygons': 0, 'circles': 0}

    def analysis(self, frame):
        h, w, ch = frame.shape
        result = np.zeros((h, w, ch), dtype=np.uint8)
        # 二值化图像
        print("start to detect lines...\n")
        gray = cv.cvtColor(frame, cv.COLOR_BGR2GRAY)
        ret, binary = cv.threshold(gray, 0, 255, cv.THRESH_BINARY_INV | cv.THRESH_OTSU)
        cv.imshow("input image", frame)

        out_binary, contours, hierarchy = cv.findContours(binary, cv.RETR_EXTERNAL, cv.CHAIN_APPROX_SIMPLE)
        for cnt in range(len(contours)):
            # 提取与绘制轮廓
            cv.drawContours(result, contours, cnt, (0, 255, 0), 2)

            # 轮廓逼近
            epsilon = 0.01 * cv.arcLength(contours[cnt], True)
            approx = cv.approxPolyDP(contours[cnt], epsilon, True)

            # 分析几何形状
            corners = len(approx)
            shape_type = ""
            if corners == 3:
                count = self.shapes['triangle']
                count = count+1
                self.shapes['triangle'] = count
                shape_type = "三角形"
            if corners == 4:
                count = self.shapes['rectangle']
                count = count + 1
                self.shapes['rectangle'] = count
                shape_type = "矩形"
            if corners >= 10:
                count = self.shapes['circles']
                count = count + 1
                self.shapes['circles'] = count
                shape_type = "圆形"
            if 4 < corners < 10:
                count = self.shapes['polygons']
                count = count + 1
                self.shapes['polygons'] = count
                shape_type = "多边形"

            # 求解中心位置
            mm = cv.moments(contours[cnt])
            cx = int(mm['m10'] / mm['m00'])
            cy = int(mm['m01'] / mm['m00'])
            cv.circle(result, (cx, cy), 3, (0, 0, 255), -1)

            # 颜色分析
            color = frame[cy][cx]
            color_str = "(" + str(color[0]) + ", " + str(color[1]) + ", " + str(color[2]) + ")"

            # 计算面积与周长
            p = cv.arcLength(contours[cnt], True)
            area = cv.contourArea(contours[cnt])
            print("周长: %.3f, 面积: %.3f 颜色: %s 形状: %s "% (p, area, color_str, shape_type))

        cv.imshow("Analysis Result", self.draw_text_info(result))
        cv.imwrite("D:/test-result.png", self.draw_text_info(result))
        return self.shapes

    def draw_text_info(self, image):
        c1 = self.shapes['triangle']
        c2 = self.shapes['rectangle']
        c3 = self.shapes['polygons']
        c4 = self.shapes['circles']
        cv.putText(image, "triangle: "+str(c1), (10, 20), cv.FONT_HERSHEY_PLAIN, 1.2, (255, 0, 0), 1)
        cv.putText(image, "rectangle: " + str(c2), (10, 40), cv.FONT_HERSHEY_PLAIN, 1.2, (255, 0, 0), 1)
        cv.putText(image, "polygons: " + str(c3), (10, 60), cv.FONT_HERSHEY_PLAIN, 1.2, (255, 0, 0), 1)
        cv.putText(image, "circles: " + str(c4), (10, 80), cv.FONT_HERSHEY_PLAIN, 1.2, (255, 0, 0), 1)
        return image

if __name__ == "__main__":
    src = cv.imread("D:/javaopencv/gem_test.png")
    ld = ShapeAnalysis()
    ld.analysis(src)
    cv.waitKey(0)
    cv.destroyAllWindows()

原图
OpenCV中几何形状识别与测量

运行结果:
OpenCV中几何形状识别与测量

控制台输出:
OpenCV中几何形状识别与测量

  • 3
    点赞
  • 58
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Part I 基础篇 OpenCV 开发基础. 1 第 1 章初识 OpenCV.. 3 1.1 OpenCV 初识 4 1.1.1 OpenCV 简介.. 4 1.1.2 OpenCV 组件及架构.. 5 1.1.3 OpenCV 资源.. 9 1.2 VS2012 安装OpenCV2.4.x .. 9 1.3 VS2013 安装OpenCV3.0 14 1.4 Sublime 下配置OpenCV. 16 1.5 小结 19 第2 章图像及视频基本操作. 20 2.1 图像初级操作 21 2.1.1 Mat 类 21 2.1.2 Mat 基本操作 23 2.1.3 Mat 类型转换 24 2.1.4 图像读取显示保存 24 2.1.5 图像存储. 26 2.2 图像几何变换 28 2.2.1 坐标映射. 28 2.2.2 平移 29 2.2.3 缩放 33 2.2.4 旋转 36 2.2.5 仿射变换. 40 2.3 视频操作.. 43 2.3.1 VideoCapture 类.. 43 2.3.2 视频写操作 45 2.3.3 视频质量评价.. 48 2.4 图像基础应用操作. 50 2.4.1 界面事件. 50 2.4.2 区域提取. 54 2.4.3 图像元素遍历——反色.. 58 2.4.4 单窗口显示多幅图像 63 2.4.5 图像颜色空间转换 66 2.4.6 图像批量读取——规则.. 69 2.4.7 图像批量读取——无规则. 70 2.5 小结 71 Part II 进阶篇图像处理技术.. 73 第 3 章进阶篇——图像灰度变换技术. 75 3.1 阈值化处理. 76 3.1.1 OTSU 阈值化 76 3.1.2 固定阈值化 79 3.1.3 自适应阈值化.. 81 3.1.4 双阈值化. 83 3.1.5 半阈值化. 84 3.2 直方图处理. 85 3.2.1 灰度直方图 85 3.2.2 H-S 直方图. 88 3.2.3 BGR 直方图.. 89 3.2.4 自定义直方图.. 91 3.2.5 灰度直方图均衡. 93 3.2.6 彩色直方图均衡. 94 3.2.7 直方图变换——查找 95 3.2.8 直方图变换——累计 97 3.2.9 直方图匹配 99 3.2.10 直方图对比.. 101 3.2.11 直方图的反向投影 105 3.3 距离变换 108 3.3.1 距离. 108 3.3.2 邻接性 109 3.3.3 区域..110 3.3.4 距离变换——扫描..110 3.3.5 距离变换——distanceTransform..113 3.4 Gamma 校正.115 3.5 其他常见的灰度变换技术117 3.5.1 线性变换117 3.5.2 对数变换119 3.5.3 对比度拉伸. 121 3.5.4 灰度级分层. 124 3.5.5 灰度比特平面 125 3.6 实例应用 128 3.6.1 最大熵阈值分割.. 128 3.6.2 投影峰谷查找 131 3.7 小结. 134 第4 章进阶篇——图像平滑技术.. 135 4.1 图像采样 136 4.1.1 最近邻插值. 136 4.1.2 双线性插值. 138 4.1.3 插值操作性能对比. 140 4.1.4 图像金字塔. 143 4.2 傅里叶变换.. 146 4.2.1 图像掩码操作 146 4.2.2 离散傅里叶. 149 4.2.3 图像卷积.. 151 4.3 图像噪声 153 4.3.1 椒盐噪声.. 153 4.3.2 高斯噪声.. 155 4.4 空间平滑 157 4.4.1 盒滤波 157 4.4.2 均值滤波.. 159 4.4.3 中值滤波.. 159 4.4.4 高斯滤波.. 161 4.4.5 双边滤波.. 163 4.5 实例应用 166 4.5.1 导向滤波.. 166 4.5.2 图像污点修复 169 4.5.3 旋转文本图像矫正. 172 4.6 小结. 178 第5 章进阶篇——边缘检测技术.. 179 5.1 边缘检测基础. 180 5.1.1 边缘检测概念 180 5.1.2 梯度算子.. 180 5.1.3 一阶微分算子 180 5.1.4 二阶微分算子 181 5.1.5 图像差分运算 182 5.1.6 非极大值抑制 184 5.2 基本边缘检测算子——Sobel 184 5.2.1 非极大值抑制Sobel 检测.. 185 5.2.2 图像直接卷积实现Sobel 186 5.2.3 图像卷积下非极大值抑制Sobel. 187 5.2.4 Sobel 库函数实现 190 5.3 基本边缘检测算子——Laplace 192 5.4 基本边缘检测算子——Roberts 194 5.5 基本边缘检测算子——Prewitt. 195 5.6 改进边缘检测算子——Canny .. 198 5.6.1 Canny 算子.. 198 5.6.2 Canny 原理及实现.. 198 5.6.3 Canny 库函数实现.. 203 5.7 改进边缘检测算子——Marr-Hildreth .. 204 5.8 几何检测 207 5.8.1 霍夫变换.. 207 5.8.2 线检测技术. 208 5.8.3 LSD 快速直线检测. 210 5.8.4 圆检测技术. 214 5.9 形状检测 215 5.9.1 轮廓检测.. 215 5.9.2 凸包检测.. 217 5.9.3 轮廓边界框. 221 5.9.4 轮廓矩 226 5.9.5 点多边形测试 229 5.10 角点检测. 232 5.10.1 moravec 角点 232 5.10.2 harris 角点. 235 5.10.3 Shi-Tomasi 角点. 238 5.11 实例应用. 240 5.11.1 颜色圆检测.. 240 5.11.2 车牌区域检测.. 243 5.12 小结 249 第6 章进阶篇——形态学技术. 250 6.1 腐蚀膨胀操作. 251 6.2 开闭运算操作. 253 6.3 形态学梯度.. 255 6.4 形态学Top-Hat.. 256 6.5 实例应用 257 6.5.1 形态学滤波角点提取. 257 6.5.2 车牌目标提取 260 6.6 小结. 263 Part III 高级篇图像应用技术. 265 第 7 章高级篇——图像分割技术.. 267 7.1 分水岭分割.. 268 7.1.1 分水岭的特征 268 7.1.2 实现分水岭分割.. 269 7.1.3 分水岭分割合并.. 270 7.2 FloodFill 分割. 273 7.3 均值漂移MeanShift 276 7.4 图割Grabcut 279 7.5 实例实例 282 7.5.1 奇异区域检测 282 7.5.2 肤色检测.. 285 7.6 小结. 288 第8 章高级篇——特征分析.. 289 8.1 尺度空间 290 8.1.1 尺度与旋转不变性. 290 8.1.2 特征点尺度变换.. 290 8.2 特征描述子.. 291 8.2.1 SIFT 特征. 292 8.2.2 SURF 特征.. 296 8.2.3 ORB 特征. 300 8.3 方向梯度直方图HOG 302 8.3.1 HOG 原理. 302 8.3.2 HOG 特征提取步骤 303 8.3.3 HOGDescriptor 特征描述类.. 304 8.3.4 HOG 特征描述实现 305 8.4 局部二值模式LBP.. 309 8.4.1 经典LBP.. 309 8.4.2 圆形LBP311 8.5 Haar 特征描述 314 8.5.1 Haar 原理. 314 8.5.2 Haar 特征提取 315 8.6 应用实例 317 8.6.1 最近邻特征点目标提取 317 8.6.2 最大极值稳定区域匹配MSER 320 8.6.3 字符特征提取 324 8.6.4 车牌字符SVM 训练.. 327 8.7 小结. 331 第 9 章高级篇——复杂视频处理技术.. 332 9.1 视频稳像技术. 333 9.2 图像拼接 338 9.2.1 拼接原理及过程.. 338 9.2.2 图像拼接实现 339 9.3 高动态范围图像HDR 342 9.3.1 HDR 合成技术.. 342 9.3.2 HDR 合成原理.. 342 9.3.3 OpenCV 实现. 343 9.4 背景建模 344 9.4.1 背景差分.. 345 9.4.2 混合高斯背景建模. 345 9.4.3 混合高斯背景建模实现 346 9.4.4 混合模型MOG2 成员参数设定. 348 9.4.5 KNN 模型背景建模实现. 349 9.4.6 GMG 模型背景建模实现 351 9.5 级联分类器——人脸检测.. 353 9.5.1 级联分类器. 353 9.5.2 CascadeClassifier 类 353 9.6 应用实例 355 9.6.1 运动目标提取 355 9.6.2 TLD 单目标跟踪.. 358 9.6.3 人眼检测与跟踪.. 361 9.7 小结. 365 附录A 366 1——代码清单.. 366 2——CMake 编译OpenCV3.1 源码. 372 3——OpenCV3.1 Extra 扩展库 375 参考文献.... 379
code_001 | [图片读取与显示](python/code_001/opencv_001.py) | ✔️ code_002 | [图片灰度化](python/code_002/opencv_002.py) | ✔️ code_003 | [图像创建与赋值](python/code_003/opencv_003.py) | ✔️ code_004 | [图像像素读写](python/code_004/opencv_004.py) | ✔️ code_005 | [图像像素算术操作(加减乘除)](python/code_005/opencv_005.py) | ✔️ code_006 | [图像伪彩色增强](python/code_006/opencv_006.py) | ✔️ code_007 | [图像像素操作(逻辑操作)](python/code_007/opencv_007.py) | ✔️ code_008 | [图像通道分离合并](python/code_008/opencv_008.py) | ✔️ code_009 | [色彩空间与色彩空间转换](python/code_009/opencv_009.py) | ✏️ code_010 | [图像像素值统计](python/code_010/opencv_010.py) | ✔️ code_011 | [图像像素归一化](python/code_011/opencv_011.py) | ✔️ code_012 | [视频读写](python/code_012/opencv_012.py) | ✔️ code_013 | [图像翻转](python/code_013/opencv_013.py) | ✔️ code_014 | [图像插值](python/code_014/opencv_014.py) | ✔️ code_015 | [绘制几何形状](python/code_015/opencv_015.py) | ✔️ code_016 | [图像ROI与ROI操作](python/code_016/opencv_016.py) | ✔️ code_017 | [图像直方图](python/code_017/opencv_017.py) | ✔️ code_018 | [图像直方图均衡化](python/code_018/opencv_018.py) | ✏️ code_019 | [图像直方图比较](python/code_019/opencv_019.py) | ✔️ code_020 | [图像直方图反向投影](python/code_020/opencv_020.py) | ✔️ code_021 | [图像卷积操作](python/code_021/opencv_021.py) | ✔️ code_022 | [图像均值与高斯模糊](python/code_022/opencv_022.py) | ❣️ code_023 | [中值模糊](python/code_023/opencv_023.py) | ✔️ code_024 | [图像噪声](python/code_024/opencv_024.py) | ✔️ code_025 | [图像去噪声](python/code_025/opencv_025.py) | ✔️ code_026 | [高斯双边模糊](python/code_026/opencv_026.py) | ✔️ code_027 | [均值迁移模糊(mean-shift blur)](python/code_027/opencv_027.py) | ✔️ code_028 | [图像积分图算法](python/code_028/opencv_028.py) | ✔️ code_029 | [快速的图像边缘滤波算法](python/code_029/opencv_029.py) | ✔️ code_030 | [自定义滤波器](python/code_030/opencv_030.py) | ✔️ code_031 | [Sobel算子](python/code_031/opencv_031.py) | ✔️ code_032 | [更多梯度算子](python/code_032/opencv_032.py) | ✔️ code_033 | [拉普拉斯算子(二阶导数算子)](python/code_033/opencv_033.py) | ✔️ code_034 | [图像锐化](python/code_034/opencv_034.py) | ✔️ code_035 | [USM 锐化增强算法](python/code_035/opencv_035.py) | ✔️ code_036 | [Canny边缘检测器](python/code_036/opencv_036.py) | ❣️ code_037 | [图像金字塔](python/code_037/opencv_037.py) | ✔️ code_038 | [拉普拉斯金字塔](python/code_038/opencv_038.py) | ✔️ code_039 | [图像模板匹配](python/code_039/opencv_039.py) | ✔️ code_040 | [二值图像介绍](python/code_040/opencv_040.py) | ✔️ code_041 | [基本阈值操作](python/code_041/opencv_041.py) | ✔️ code_042 | [图像二值寻找法OTSU](python/code_042/opencv_042.py) | ✏️ code_043 | [图像二值寻找法TRIANGLE](python/code_043/opencv_043.py) | ✔️ code_044 | [图像自适应阈值算法](python/code_044/opencv_044.py) | ✏️ code_045 | [图像二值与去噪](python/code_045/opencv_045.py) | ✏️ code_046 | [图像连通组件寻找](python/code_046/opencv_046.py) | ✔️ code_047 | [图像连通组件状态统计](python/code_047/opencv_047.py) | ✔️ code_048 | [轮廓寻找](python/code_048/opencv_048.py) | ❣️ code_049 | [轮廓外接矩形](python/code_049/opencv_049.py) | ❣️ code_050 | [轮廓矩形面积与弧长](python/code_050/opencv_050.py) | ✏️ code_051 | [轮廓逼近](python/code_051/opencv_051.py) | ✔️ code_052 | [几何矩计算中心](python/code_052/opencv_052.py) | ✔️ code_053 | [使用Hu矩阵实现轮廓匹配](python/code_053/opencv_053.py) | ✔️ code_054 | [轮廓圆与椭圆拟合](python/code_054/opencv_054.py) | ✔️ code_055 | [凸包检测](python/code_055/opencv_055.py) | ✏️ code_056 | [直线拟合与极值点寻找](python/code_056/opencv_056.py) | ✔️ code_057 | [点多边形测试](python/code_057/opencv_057.py) | ✔️ code_058 | [寻找最大内接圆](python/code_058/opencv_058.py) | ✔️ code_059 | [霍夫曼直线检测](python/code_059/opencv_059.py) | ✔️ code_060 | [概率霍夫曼直线检测](python/code_060/opencv_060.py) | ❣️ code_061 | [霍夫曼圆检测](python/code_061/opencv_061.py) | ❣️ code_062 | [膨胀和腐蚀](python/code_062/opencv_062.py) | ❣️ code_063 | [结构元素](python/code_063/opencv_063.py) | ✔️ code_064 | [开运算](python/code_064/opencv_064.py) | ✏️ code_065 | [闭运算](python/code_065/opencv_065.py) | ✏️ code_066 | [开闭运算的应用](python/code_066/opencv_066.py) | ✏️ code_067 | [顶帽](python/code_067/opencv_067.py) | ✔️ code_068 | [黑帽](python/code_068/opencv_068.py) | ✔️ code_069 | [图像梯度](python/code_069/opencv_069.py) | ✔️ code_070 | [基于梯度的轮廓发现](python/code_070/opencv_070.py) | ✏️ code_071 | [击中击不中](python/code_071/opencv_071.py) | ✔️ code_072 | [缺陷检测1](python/code_072) | ✔️ code_073 | [缺陷检测2](python/code_073/opencv_073.py) | ✔️ code_074 | [提取最大轮廓和编码关键点](python/code_074) | ✔️ code_075 | [图像修复](python/code_075/opencv_075.py) | ✔️ code_076 | [图像透视变换应用](python/code_076/opencv_076.py) | ✏️ code_077 | [视频读写和处理](python/code_077/opencv_077.py) | ✏️ code_078 | [识别与跟踪视频中的特定颜色对象](python/code_078) | ✔️ code_079 | [视频分析-背景/前景 提取](python/code_079/opencv_079.py) | ✔️ code_080 | [视频分析–背景消除与前景ROI提取](python/code_080) | ✔️ code_081 | [角点检测-Harris角点检测](python/code_081) | ✔️ code_082 | [角点检测-Shi-Tomas角点检测](python/code_082) | ✏️ code_083 | [角点检测-亚像素角点检测](python/code_083) | ✔️ code_084 | [视频分析-KLT光流跟踪算法-1](python/code_084) | ✏️ code_085 | [视频分析-KLT光流跟踪算法-2](python/code_085) | ✏️ code_086 | [视频分析-稠密光流分析](python/code_086) | ✏️ code_087 | [视频分析-帧差移动对象分析](python/code_087/opencv_087.py) | ✔️ code_088 | [视频分析-均值迁移](python/code_088) | ✏️ code_089 | [视频分析-连续自适应均值迁移](python/code_089) | ✏️ code_090 | [视频分析-对象移动轨迹绘制](python/code_090) | ✔️ code_091 | [对象检测-HAAR级联分类器](python/code_091) | ✔️ code_092 | [对象检测-HAAR特征分析](python/code_092) | ✔️ code_093 | [对象检测-LBP特征分析](python/code_093/opencv_093.py) | ✔️ code_094 | [ORB 特征关键点检测](python/code_094) | ✏️ code_095 | [ORB 特征描述子匹配](python/code_095) | ✔️ code_096 | [多种描述子匹配方法](python/code_096) | ✏️ code_097 | [基于描述子匹配的已知对象定位](python/code_097) | ✏️ code_098 | [SIFT 特征关键点检测](python/code_097) | ✔️ code_099 | [SIFT 特征描述子匹配](python/code_097) | ✔️ code_100 | [HOG 行人检测](python/code_100/opencv_100.py) | ✔️ code_101 | [HOG 多尺度检测](python/code_101/opencv_101.py) | ✏️ code_102 | [HOG 提取描述子](python/code_102/opencv_102.py) | ✔️ code_103 | [HOG 使用描述子生成样本数据](python/code_103/opencv_103.py) | ✔️ code_104 | [(检测案例)-HOG+SVM 训练](python/code_104/opencv_104.py) | ✔️ code_105 | [(检测案例)-HOG+SVM 预测](python/code_105/opencv_105.py) | ✔️ code_106 | [AKAZE 特征与描述子](python/code_106) | ✔️ code_107 | [Brisk 特征与描述子](python/code_107) | ✔️ code_108 | [GFTT关键点检测](python/code_108) | ✔️ code_109 | [BLOB 特征分析](python/code_109) | ✔️
OpenCVSharp中,可以使用HoughLinesP方法从点集中提取直线。Hough变换是一种广泛用于计算机视觉和图像处理的技术,可以用于检测图像中的直线、圆等几何形状。 HoughLinesP方法可以从二值化图像中检测直线。在使用该方法之前,需要将原始图像转换为二值化图像。如果原始图像包含多个颜色或灰度级别,可以使用阈值化技术将其转换为二值化图像。 以下是一个示例代码,演示如何使用OpenCVSharp从点集中提取直线: ```csharp using OpenCvSharp; using OpenCvSharp.Extensions; // 生成一组点 var points = new[] { new Point(0, 0), new Point(100, 100), new Point(200, 0) }; // 创建一个空图像 var img = new Mat(200, 200, MatType.CV_8UC1, Scalar.All(0)); // 在图像上绘制点 foreach (var point in points) { img.Circle(point, 2, Scalar.White, -1); } // 将图像转换为二值化图像 var binaryImg = new Mat(); Cv2.CvtColor(img, binaryImg, ColorConversionCodes.BGR2GRAY); Cv2.Threshold(binaryImg, binaryImg, 127, 255, ThresholdTypes.Binary); // 从二值化图像中提取直线 var lines = Cv2.HoughLinesP(binaryImg, 1, Math.PI / 180, 50, 50, 10); // 在图像上绘制直线 foreach (var line in lines) { img.Line(line.P1, line.P2, Scalar.Red, 2); } // 显示图像 Cv2.ImShow("Lines", img); Cv2.WaitKey(0); ``` 此代码生成一个包含三个点的图像,并创建一个二值化图像。然后,它使用HoughLinesP方法从二值化图像中检测直线,并在图像上绘制直线。最后,它显示包含直线的图像。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值