检测轮廓 获取其最值的坐标 opencv-python
2024-09-02 15:52:43
一、基础知识
图像清晰度评价算法有多种
空域中,主要考察图像的邻域对比度,即相邻像素间灰度特征的 梯度差;
频域中,主要考察图像的频率分量,清晰的图像高频分量多,模糊的图像低频分量多。
灰度值
把白色与黑色之间按对数关系分成若干级,称为“灰度等级”。范围一般从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
最新文章
- Linq To Nhibernate 性能优化(入门级)
- ajax检查用户名是否存在
- 通过javascript在网页端生成zip压缩包并下载
- 【转】java的socket编程
- LogHelper拾遗
- 【转】ASP.NET服务器控件使用之MultiView和View
- CentOS系统常用命令
- What is the Xcopy Command?:
- CSS的一些思考(一)
- 注册界面设计及实现之(三)SharedPerferences实现数据暂存
- 基于hadoop的电影推荐结果可视化
- MySQL中Identifier Case Sensitivity
- LeetCode算法题-Array Partition I(Java实现)
- Maven 学习总结 (一)
- docker安装nginx和php
- PythonStudy——运算符优先级 Operator precedence
- 再次膜拜IE的超强兼容性
- go变量和常量
- php毫秒时间戳
- POJ1860 Currency Exchange【最短路-判断环】