遍历二值图获取每一列或者每一行的第一个像素值为255的点来拟合直线
时间: 2024-03-12 08:43:26 浏览: 63
获取图片某点的像素值
5星 · 资源好评率100%
可以使用OpenCV库中的函数来实现该功能。具体步骤如下:
1. 读取二值图像,将其转换为灰度图像。
2. 对于每一列或每一行,使用 OpenCV 库中的函数 findNonZero() 来获取所有像素值为 255 的点的坐标。
3. 在这些点中找到距离图像上边界或下边界最近的点,作为该列或该行的第一个像素值为 255 的点。
4. 将所有列或所有行的第一个像素值为 255 的点连接起来,即可得到拟合直线。
具体实现代码如下:
```python
import cv2
import numpy as np
img = cv2.imread('binary_image.png', 0)
img = cv2.threshold(img, 127, 255, cv2.THRESH_BINARY)[1] # 转换为二值图像
# 获取所有列的第一个像素值为255的点
column_coords = []
for i in range(img.shape[1]):
column = img[:, i]
nonzero_coords = cv2.findNonZero(column)
if nonzero_coords is not None:
first_coord = tuple(nonzero_coords[0][0])
column_coords.append((i, first_coord[1]))
# 获取所有行的第一个像素值为255的点
row_coords = []
for i in range(img.shape[0]):
row = img[i, :]
nonzero_coords = cv2.findNonZero(row)
if nonzero_coords is not None:
first_coord = tuple(nonzero_coords[0][0])
row_coords.append((first_coord[0], i))
# 连接所有列的第一个像素值为255的点,得到拟合直线
column_line = cv2.fitLine(np.array(column_coords), cv2.DIST_L2, 0, 0.01, 0.01)
# 连接所有行的第一个像素值为255的点,得到拟合直线
row_line = cv2.fitLine(np.array(row_coords), cv2.DIST_L2, 0, 0.01, 0.01)
```
其中,fitLine() 函数用于拟合直线,第一个参数是所有点的坐标,第二个参数是距离度量方式,第三个参数是距离的精度,第四个参数和第五个参数是拟合直线的精度。返回值是一组向量,可以用来计算直线上的点的坐标。
阅读全文