OpenCV中的Matlab函数(improfile) - Python 2.7
我想做的是在一张二值图像上生成两条线(一条竖线,一条横线)。然后把这些线所在的行和列的值,以及这些线下方的像素值都放到一个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开始的。