OpenCV
OpenCV读取图像时默认H×W×C,通道顺序为BGR
使用cv2.cvtColor(img, cv2.COLOR_BGR2RGB)将BGR转RGB才能显示原来的图片颜色
图是三维数组H×W×C,第一维是行(Height),第二维是列(Width),第三行是通道(channel)BGR
img=cv2.imread(“picture.jpg”)
读取图片
cv2.imshow(“Image”,picture)
创建标题名为Image的窗口,显示图片picture。同名窗口只会存在一个,显示最后一个图片
Jupyter中无法使用cv2.imshow()。cv2.imshow()需要调用系统级GUI窗口,而Jupyter Notebook在浏览器运行不支持弹出独立窗口,代码执行陷入无响应。
用plt.imshow(img)为替代(img为cv2,imread的变量不是字符串)
cv2.waitKey(0)
让窗口保持打开状态,直到用户按下任意键。参数0表示无限等待,cv2.waitKey(1000)表示等待1000ms(1秒)。没有这一句,窗口会在显示后立即关闭
cv2.destroyAllWindows()
关闭所有由OpenCV打开的窗口。
cv2.imwrite(“fname.jpg”,img)
保存img图片为fname.jpg于当前目录下
彩色图的灰度(或亮度)值Gray=(B0.114+G0.587+R0.299)
ar_hwc_3=(
0.114ar_hwc_1[:,:,0] +
0.587ar_hwc_1[:,:,1] +
0.299ar_hwc_1[:,:,2]
).astype(np.uint8)
彩图转灰度图
astype(np.uint8)是NumPy中改变数组数据类型的函数,将数组转换成8位无符号整数类型(unsigned 8-bit integer)也就是把每个像素值变成0~255之间的整数。
OpenCV显示图像时要求图像的像素类型必须是:uint8(0~255)或float32(0~1或0~255)
公式计算时得到的是带小数的float型,必须转成uint8。OpenCV显示图像的标准格式是uint8,OpenCV不会自动把float值映射到显示范围,需要自己保证数值合法并归一化(normalize)
图等比例缩小可以跨行读取图比如[::4, ::4, :],是4:1缩小
np.vstack()只能接收一个”元组/列表”作为参数,拼接两张图需要传入元组(p1,p2)而不是p1,p2
