OpenCV中的Matlab函数(improfile) - Python 2.7

1 投票
2 回答
1381 浏览
提问于 2025-04-18 11:38

我想做的是在一张二值图像上生成两条线(一条竖线,一条横线)。然后把这些线所在的行和列的值,以及这些线下方的像素值都放到一个Python列表里。

在Matlab中,你可以通过在二值图像上运行 improfile() 来实现这个功能,前提是你把二值图像的像素值设置为“10/255”,可以用 im2bw(image,10/255) 来做到。

在Python的OpenCV中,这样做可能吗?

2 个回答

1

OpenCV的C接口中有一个叫做 cvSampleLine 函数,这个函数的作用是:

获取指定线段上的像素,并把它们存储到一个缓冲区里。

1

OpenCV(模块 cv2)中的图像可以像 numpy.array 一样处理。

所以,如果你想先把一张图片转换成黑白的,可以这样做:

bwimg = image > 10

这段代码会创建一个由真(True)和假(False)值组成的数组,具体取决于 bwimg 中对应的元素是否大于10。通常情况下,图像的亮度值范围在0到255之间,如果你是从文件中读取的图像。(当然,也可能有其他的值。)

如果你想要获取从像素点(23,57)到(86,57)之间的值,只需从数组中选择对应的值即可:

pixels = bwimg[57, 23:87]

现在你得到了一个由真和假值组成的数组。如果你想要数字,可以把它乘以1:

pixels = 1 * bwimg[57, 23:87]

垂直线的处理方式也是类似的:

pixels = bwimg[2:65, 47]

这段代码会选择第47列中像素点2到64的值(注意,范围的结束值是不包括在内的)。

有一点需要提醒使用Matlab的朋友:Python中的数组索引是从0开始的。

撰写回答