检测轮廓 获取其最值的坐标 opencv-python

2022-12-19,,,

一、基础知识

图像清晰度评价算法有多种

空域中,主要考察图像的邻域对比度,即相邻像素间灰度特征的 梯度差;

频域中,主要考察图像的频率分量,清晰的图像高频分量多,模糊的图像低频分量多。

灰度值

把白色与黑色之间按对数关系分成若干级,称为“灰度等级”。范围一般从0到255,白色为255,黑色为0

物体的边缘呈现灰度的不连续性,图像分割就是基于这个原理

图像滤波

平滑图像,达到降低图像噪音的效果(平滑空间滤波)

锐化图像,突出灰度的过渡部分(锐化空间滤波)

Sobel(索贝尔)算子

主要用于获得数字图像的一阶梯度,常用于边缘检测

它根据 图像中每个像素的上下左右四邻域的灰度值加权差,在边缘处达到极值从而检测边缘。

Sobel 算子有两个,一个是检测水平边缘的 ;另一个是检测垂直边缘的 。

二、检测十字边界

目标获取图片中最左边与最上边的坐标

    im = cv2.imread(image_path)
imgray = cv2.cvtColor(im, cv2.COLOR_BGR2GRAY)
imgray_gauss = cv2.GaussianBlur(imgray, (3, 3), 0) # 高斯滤波
canny = cv2.Canny(imgray_gauss, 50, 100)
# 返回值 第一个是图像 第二个是轮廓,第三个是(轮廓的)层析结构 轮廓(第二个返回值)是一个 Python列表,其中存储这图像中的所有轮廓。每一个轮廓都是一个 Numpy 数组,包含对象边界点( x, y)的坐标
contours, hierarchy = cv2.findContours(canny, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) x_min = 10000
y_min = 10000
for i_array in contours:
min_tuple = (int(i_array.min(0)[0][0]), int(i_array.min(0)[0][1]))
if x_min > min_tuple[0]:
x_min = min_tuple[0]
if y_min > min_tuple[1]:
y_min = min_tuple[1] min_tuple_use = (x_min, y_min) # x、y的最小值
return min_tuple_use

参考:

https://zhuanlan.zhihu.com/p/38739563

https://blog.csdn.net/czdsdhryes/article/details/104134491

https://blog.csdn.net/HuangZhang_123/article/details/80511270

检测轮廓 获取其最值的坐标 opencv-python的相关教程结束。

《检测轮廓 获取其最值的坐标 opencv-python.doc》

下载本文的Word格式文档,以方便收藏与打印。