Opencv学习笔记一
读取、显示和保存图像
读取:imread(路径)
显示:imshow(名+图片)
保存:imwrite(保存路径+图片)
import cv2 as cv
src = cv.imread("D:/lenna.jpg") #读取图像
cv.namedWindow("input",cv.WINDOW_AUTOSIZE) #创建名为input的窗口
cv.imshow("input",src) #显示图像
cv.imwrite("input",src)
cv.waitKey(0) #waitKey(0)表示阻塞等待用户键盘输入,用户按键盘任意键就会停止阻塞,继续执行直到程序正常退出!
cv.destroyAllWindows() #销毁窗口
色彩空间
cvtColor(图片+转换方式)
-
COLOR_BGR2GRAY 彩色到灰度
-
COLOR_GRAY2BGR 灰度到彩色
-
COLOR_BGR2HSV BGR到HSV
-
COLOR_HSV2BGR HSV到 BGR
import cv2 as cv
src = cv.imread("D:/lenna.jpg") #读取图像
cv.namedWindow("input",cv.WINDOW_AUTOSIZE) #创建名为input的窗口
gray=cv.cvtcolor(src,cv.COLOR_BGR2GRAY)
hsv=cv.cvtcolor(src,cv.COLOR_BGR2HSV)
cv.imshow("gray",gray)
cv.imshow("hsv",hsv)
cv.waitKey(0)
cv.destroyAllWindows()
创建图像
在计算机中,图像的存储利用的是矩阵,创建图像在这里就是创建矩阵。
用到的库为numpy,这是一个功能强大的科学计算库。
这里 主要库函数:
np.copy()
np.zeros(shape,dtype)
np.ones(shape,dtype)
import cv2 as cv
import numpy as np
src = cv.imread("D:/lenna.jpg") #读取图像
cv.namedWindow("input",cv.WINDOW_AUTOSIZE) #创建名为input的窗口
m1=copy(src) #将src拷贝一份
imshow("m1",m1)
m2=src
m2[100:200,200:300,:]=255 #宽,高,通道数
cv.imshow("m2",m2)
m3=np.zeros(src.shape,src.dtype) #0矩阵,形状和类型与src一致
cv.imshow("m3",m3)
m4=np.zeros([512,512],np.uint8)
cv.imshow("m4",m4)
m5=np.ones(shape=[512,512,3],dtype=np.uint8)
m5[:,:,0]=255 #0代表第0号通道,0,1,2号通道分别代表B、G、R通道
cv.imshow("m5",m5)
cv.waitKey(0)
cv.destroyAllWindows()
像素算术操作
- 加add
- 减subtract
- 乘multiply
- 除dvide
import cv2 as cv
import numpy as np
src1 = cv.imread("D:/Logo1.jpg");
src2 = cv.imread("D:/Logo2.jpg");
add_result = np.zeros(src1.shape, src1.dtype);#创建图像,用于保存结果
cv.add(src1, src2, add_result);
cv.imshow("add_result", add_result);
sub_result = np.zeros(src1.shape, src1.dtype);
cv.subtract(src1, src2, sub_result);
cv.imshow("sub_result", sub_result);
mul_result = np.zeros(src1.shape, src1.dtype);
cv.multiply(src1, src2, mul_result);
cv.imshow("mul_result", mul_result);
div_result = np.zeros(src1.shape, src1.dtype);
cv.divide(src1, src2, div_result);
cv.imshow("div_result", div_result);
cv.waitKey(0)
cv.destroyAllWindows()
像素逻辑运算
- 与操作:bitwise_and
- 异或操作:bitwise_xor
- 或操作:bitwise_or
- 取反操作:bitwise_not 图像二值分析中经常使用
跟我们平时编程中的逻辑运算很类似,这里我们举个例子。
我们知道黄色是由红色和绿色组成的
一张黄色图像与一张红色图像进行与操作时,结果只会保留两者重叠部分的红色;
异或操作,重叠部分变为绿色,其余部分保留;
或操作,黄色会覆盖红色(重叠的话)