输入与输出
对于图片(以Python代码为例)
1.从文件加载图像:
img = cv.imread(filename)
2.如果读取的是jpg文件,默认情况下会创建3通道图像。如果需要灰度图像,则需要使用:
img = cv.imread(filename, cv.IMREAD_GRAYSCALE)
注意:文件的格式取决于其内容(前几个字节)。要将图像保存到文件:
cv.imwrite(filename, img)
图像基本操作
访问像素强度值
为了获得像素强度值,您必须知道图像的类型和通道数。这是一个单通道灰度图像(类型8UC1)以及像素坐标x和y的示例:
intensity = img[y,x]
现在,让我们考虑一个具有BGR颜色顺序的3通道图像(返回默认格式imread)
blue = img[y,x,0]
green = img[y,x,1]
red = img[y,x,2]
可以使用相同的方法来更改像素强度:
img [y,x] = 128
基本操作
在矩阵上定义了许多方便的运算符。例如,我们可以从现有的灰度图像制作黑色图像
img[:] = 0
选择感兴趣的区域:
smallImg = img[10:110,10:110]
从彩色到灰度的转换:
img = cv.imread('image.jpg')
grey = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
将图像类型从8UC1更改为32FC1:
dst = src.astype(np.float32)
可视化图像(Visualizing images)
在开发过程中查看算法的中间结果非常有用。OpenCV提供了一种可视化图像的便捷方法。可以使用以下方式显示8U图像:
img = cv.imread('image.jpg')
cv.namedWindow('image', cv.WINDOW_AUTOSIZE)
cv.imshow('image', img)
cv.waitKey()
调用waitKey()将启动消息传递周期,该消息传递周期等待“图像”窗口中的击键。需要将32F图像转换为8U类型。例如:
img = cv.imread('image.jpg')
grey = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
sobelx = cv.Sobel(grey, cv.CV_32F, 1, 0)
# find minimum and maximum intensities
minVal = np.amin(sobelx)
maxVal = np.amax(sobelx)
draw = cv.convertScaleAbs(sobelx, alpha=255.0/(maxVal - minVal),
beta=-minVal * 255.0/(maxVal - minVal))
cv.namedWindow('image', cv.WINDOW_AUTOSIZE)
cv.imshow('image', draw)
cv.waitKey()
Tips:
waitKey()函数功能:waitKey()函数的功能是不断刷新图像,频率时间为delay,单位为ms。
返回值为当前键盘按键值。
1.waitKey()–是在一个给定的时间内(单位ms)等待用户按键触发;如果用户没有按下键,则持续等待(循环)
一般情况下设置waitKey(0),表示程序会无限制的等待用户的下一步操作。在imgshow的时候,如果设置waitKey(0),代表按任意键继续
2.显示视频时,延迟时间需要设置为 大于0的参数,delay>0时,延迟”delay”ms,在显示视频时这个函数是有用的,
用于设置在显示完一帧图像后程序等待”delay”ms再显示下一帧视频;而如果使用waitKey(0)则只会显示第一帧视频。
参考:
https://docs.opencv.org/master/d5/d98/tutorial_mat_operations.html