欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Open cv的Canny边缘检测和轮廓检测例子

程序员文章站 2022-05-30 09:41:08
...

Open cv的Canny边缘检测和轮廓检测例子

 

 

 

 

# -*- coding:utf-8 -*-

import cv2
image = cv2.imread("images/000.jpg")
cv2.imshow("en",image)
#Canny函数,三个参数:源图像,低阈值,高阈值
image = cv2.Canny(image,200,300)


cv2.imshow("what",image)



cv2.waitKey(0)

Canny 源码解析

 

====================================================================================

轮廓检测

imread( )

第一个参数是图像的路径,第二个参数一般默认为1,也就是彩色图片.

第二个参数,int类型的flags,为载入标识

  • flags = 0, 载入灰度图
  • flags = 1, 默认值
  • flags = 2, 无损源图像

 

固定阈值操作:threshold( )函数

基本思想

对单通道数组应用固定阈值操作.该函数的典型应用是对灰度图像进行阈值操作得到二值图像,或者是去掉噪声例如滤掉很大或者很小的像素值的图像点.

python:  cv2.threshold(src,thresh,maxval,type,dst)

第一个参数src: 源数据.

第二个参数thresh: 阈值的具体值.

第三个参数maxval: 当type值取cv2.THRESH_BINARY或cv2.THRESH_BINARY_INV时域值类型时的最大值.

第四个参数type: 阈值类型.

  • cv2.THRESH_BINARY 二进制阈值:二值阈值化
  • cv2.THRESH_BINARY_INV 反二进制阈值:反向二值阈值化并反转
  • THRESH_TRUNC 截断阈值:截断阈值化
  • THRESH_TOZERO 反阈值化为0:超过阈值被置为0
  • THRESH_TOZERO_INV 阈值化为0:低于阈值被置为0

上述标识符依次取值分别为0,1,2,3,4.

 

查找并绘制轮廓

  • 寻找轮廓:findContours( )函数

用于在二值图像中寻找轮廓

cv2.findContours(image, mode, method, contours, hierarchy, offset)

第一个参数 image : 输入图像,即源图像.图像的非零像素被视为 1 , 0 像素值被保留为0,所以图像为二进制.可以使用compare(),inrange(),threshold(),adaptivethreshold(),canny()等函数由灰度图或者彩色图创建二进制图像.此函数会在提取图像轮廓的同时修改图像的内容.

第二个参数 mode : 轮廓检索模式.

第三个参数 method : 轮廓的近似办法

第四个参数 contours : 检测到的轮廓,函数调用后的运算结果存在这里.每个轮廓存储为一个点向量.

第五个参数 hierarchy : 可选的输出向量,包含图像的拓扑信息,其作为轮廓数量的表示,包含了许多元素.

第六个参数 offset :每个轮廓点的可选偏移量,有默认值.

 

  • 绘制轮廓:drawContours( )函数

用于在图像中绘制外部或内部轮廓.

cv2.drawContours(image, contours, contourIdx, color, thickness = None, lineType = None, hierarchy = None, maxLevel

=None, offset = None)

第一个参数 image : 目标图像.

第二个参数 contours : 所有的输入轮廓.

第三个参数 contourIdx : 轮廓绘制的只是指示变量,如果其为负值,则绘制所有的轮廓.

第四个参数 color : 轮廓的颜色.

第五个参数 thicKness : 轮廓线条的粗细度,有默认值1.如果其为负值(如thickness = cv_filled),便会绘制在轮廓的内部.

第六个参数 lineType:线条的类型,有默认值.

第七个参数 hierarchy : 可选的层次结构信息,有默认值.

第八个参数 maxLevel : 表示用于绘制轮廓的最大等级,有默认值.

第九个参数 offset : 可选的轮廓偏移参数,用指定的偏移量offset = (dx, dy)偏移需要绘制的轮廓,有默认值.

# -*- coding:utf-8 -*-

import cv2

# Step1. 读入图像,并转换成灰度图像
image = cv2.imread('images/000.jpg', 0)
cv2.imshow("gray",image )
# Step2. 二值化
ret, thresh = cv2.threshold(image, 127, 255, cv2.THRESH_BINARY)

# Step3. 轮廓提取
image, contour, hierarchy = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)

# Step4. 轮廓绘制
color = cv2.cvtColor(image, cv2.COLOR_GRAY2BGR)
dst = cv2.drawContours(color, contour, -1, (0,255,0), 2)

cv2.imshow("dst", dst)

cv2.waitKey(0)

Open cv的Canny边缘检测和轮廓检测例子

 

 更具体的函数介绍可以点击此

 

相关标签: open