IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> opencv-pythons实现图像周长面积(三角形)检测DIY整理 -> 正文阅读

[人工智能]opencv-pythons实现图像周长面积(三角形)检测DIY整理


先斩后奏,源码:

#python 3.7.4,opencv4.1
# https://www.freesion.com/article/6289910425/
#蔡军生 https://blog.csdn.net/caimouse/article/details/51749579
#
import cv2
import numpy as np
from scipy import signal
import math
 
#图片的路径
imgname = 'S:\\AdobeppPS\\SKOO\\cc33.jpg'
 
#读取图片
image = cv2.imread(imgname, cv2.IMREAD_COLOR)
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
 
#图片的高度和宽度
h,w = image.shape[:2]
print('imagesize={}-{}'.format(w,h))
ret, img_bin = cv2.threshold(gray, 100, 255, cv2.THRESH_BINARY|cv2.THRESH_OTSU)
 
kernel = cv2.getStructuringElement(cv2.MORPH_RECT,(3,3))
img_bin = cv2.erode(img_bin,kernel,iterations = 1)
cv2.imshow("img_bin",img_bin) 
#查找,绘制
contours , hierarchy = cv2.findContours(img_bin , cv2.RETR_LIST,cv2.CHAIN_APPROX_SIMPLE)
print(len(contours))
# print(contours)
print("dgcaijid",len(hierarchy))
# print(hierarchy)
 
largest = None
show = False
FIRST = 0
RED = (0, 0, 255)
THICKNESS = 3
for contour in contours:
    approx = cv2.approxPolyDP(contour,0.01*cv2.arcLength(contour,True),True)    
    if len(approx) == 3:
        #发现三角形
        if largest is None or cv2.contourArea(contour) > cv2.contourArea(largest):
            largest = contour
            show = True
if show:
    cv2.drawContours(image, [largest], FIRST, RED, THICKNESS)
cv2.imshow("Image",image)
 
cv2.waitKey(0)
# cv2.destroyAllWindows()

数据输出:
在这里插入图片描述
参考来源:https://www.freesion.com/article/6289910425/
根据周长和面积对一些轮廓进行处理。比如怎么样识别轮廓是一个三角形组成呢?显然就可看它是否有三条边组成的。如果一堆三角形里,还要找一个最大面积的三角形呢?
这时就需要使用OpenCV的函数:
arcLength、contourArea、approxPolyDP,相关的函数定义如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1、计算周长参数详解 arcLength 函数
基本格式;
CV-C++/
double cv::arcLength(InputArray curve,bool closed)
python:
cv2.arcLength(InputArray curve,bool closed)

(1) 第一个参数,InputArray curve,一般是由图像的轮廓点组成的点集;
(2) 第二个参数,bool closed,表示输出的多边形是否封闭;true表示封闭,false表示不封闭;这个函数用来计算周长。
2、计算面积参数详解 contourArea 函数
基本格式;
CV-C++/
double cv::contourArea(InputArray contour,bool oriented)
python:
cv2.contourArea(InputArray contour,bool oriented)

(1) 第一个参数,InputArray contour,一般是由图像的轮廓点组成的点集;
(2) 第二个参数,bool oriented,如果设置为true时,表示返回有正负号的面积(根据点的顺序方向),否则返回绝对值。
这个函数用来计算面积。

3、拟合折线参数详解 approxPolyDP 函数
基本格式;
CV-C++/
double cv::approxPolyDP(InputArray contour,OutputArray approxCurve,
double epsilon,bool closed)
python:
cv2.approxPolyDP(InputArray contour,OutputArray approxCurve,
double epsilon,bool closed)

(1) 第一个参数,InputArray contour,一般是由图像的轮廓点组成的点集;
(2) 第二个参数,OutputArray approxCurve,表示输出的多边形点集;
(3) 第三个参数,double epsilon:主要表示输出的精度,就是另个轮廓点之间最大距离数。
(4) 第四个参数,bool closed:表示输出的多边形是否封闭,布尔操作
主要功能是把一个连续光滑曲线折线化,对图像轮廓点进行多边形拟合。

简言之,对于cv的函数周长面积的参数,或者换句话说:
ContourArea 计算整个轮廓或部分轮廓的面积
double cvContourArea( const CvArr* contour, CvSlice slice=CV_WHOLE_SEQ );
contour 代表的是轮廓 (定点的序列或数组).
slice 代表的是感兴趣特征轮廓部分的起始点,缺省是计算整个轮廓的面积。
对后面的情况,面积表示轮廓部分和起始点连线构成的封闭部分的面积。
注意:
轮廓的方向影响面积的符号。因此函数也许会返回负的结果。应用函数 fabs() 得到面积的绝对值。
ArcLength 计算轮廓周长或曲线长度
double cvArcLength( const void* curve, CvSlice slice=CV_WHOLE_SEQ, int is_closed=-1 );
curve 曲线点集序列或数组
slice 曲线的起始点,缺省是计算整个曲线的长度
is_closed 表示曲线是否闭合,有三种情况:
is_closed=0 ——假设曲线不闭合
is_closed>0 ——假设曲线闭合
is_closed<0 ——若曲线是序列,检查 ((CvSeq*)curve)->flags 中的标识 CV_SEQ_FLAG_CLOSED 来确定曲线是否闭合。否则 (曲线由点集的数组 (CvMat*) 表示) 假设曲线不闭合。
函数 cvArcLength 通过依次计算序列点之间的线段长度,并求和来得到曲线的长度参考自博客
在这里插入图片描述
在这里插入图片描述
有效性不太好,对多个轮廓。
参考其他

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2021-08-06 09:37:50  更:2021-08-06 09:51:29 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/17 22:46:17-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码