目录
1. 图片加载、显示和保存
2. 图像显示窗口创建与销毁
3. 图片宽、高、通道数获取
4. 图像像素数目和图像数据类型的获取
5. 生成指定大小的空图像, 生成指定大小的空图像
6. 访问和操作图像像素
7. 图像三通道分离和合并
8. 抓取摄像头
1. 图片加载、显示和保存
import cv2
# 生成图片
img = cv2.imread(r'C:\Users\Desktop\test1.jpg')
# 生成灰色图片
imgGrey = cv2.imread("1.jpg", 0)
# 展示原图
cv2.imshow("img", img)
# 展示灰色图片
#cv2.imshow("imgGrey", imgGrey)
# 等待图片的关闭
cv2.waitKey(0)
# 保存灰色图片
#cv2.imwrite("Copy.jpg", imgGrey)
2. 图像显示窗口创建与销毁
cv2.namedWindow(窗口名,属性) 创建一个窗口,属性—指定窗口大小模式:
cv2.WINDOW_AUTOSIZE:根据图像大小自动创建大小
cv2.WINDOW_NORMAL:窗口大小可调整
cv2.destoryAllWindows(窗口名) 删除任何建立的窗口
import cv2# 生成图片img = cv2.imread(r'C:\Users\Desktop\test1.jpg')cv2.namedWindow("img", cv2.WINDOW_NORMAL)cv2.imshow("img", img)cv2.waitKey()cv2.destroyAllWindows()
3. 图片宽、高、通道数获取
img.shape 返回图像高(图像矩阵的行数)、宽(图像矩阵的列数)和通道数3个属性组成的元组,若图像是非彩色图,则只返回高和宽组成的元组。
import cv2img = cv2.imread(r'C:\Users\Desktop\test1.jpg')
imgGray = cv2.imread(r'C:\Users\Desktop\test1.jpg', 0)print('****img*****)
print( img.shape)
print('width: ', img.shape[0])
print('heigh: ', img.shape[1])
print('channel: ', img.shape[2])print('\n\n***imgGray**')
print(imgGray.shape)
print('width: ', imgGray.shape[0])
print('heigh: ', imgGray.shape[1])
print('channel: ', imgGray.shape[2])
4. 图像像素数目和图像数据类型的获取
图像矩阵img的size属性和dtype分别对应图像的像素总数目和图像数据类型。一般情况下,图像的数据类型是uint8。
import cv2img = cv2.imread(r'C:\Users\Desktop\test1.jpg')print('图像类型: ', type(img))
print('图像像素点数: ', img.size)
print('图像像素灰度值类型:', img.dtype)
5. 生成指定大小的空图像, 生成指定大小的空图像
import cv2
import numpy as npimg = cv2.imread(r'C:\Users\Desktop\test1.jpg')
imgZero = np.zeros(img.shape, np.uint8)
imgFix = np.zeros((300, 500, 3), np.uint8)cv2.imshow("imgZero", imgZero)
cv2.imshow("imgFix", imgFix)
cv2.waitKey()
6. 访问和操作图像像素
OpenCV中图像矩阵的顺序是B、G、R。可以直接通过坐标位置访问和操作图像像素。
import cv2
import numpy as npimg = cv2.imread(r'C:\Users\Desktop\test1.jpg')pixel_50_100 = img[50, 100]
#返回3个值,分别是该像素点在BGR通道的值
print(pixel_50_100)img[50, 100] = (0, 0, 255)cv2.imshow("img", img)
cv2.waitKey()
分开访问图像某一通道像素值也very方便
import cv2
import numpy as npimg = cv2.imread(r'C:\Users\Desktop\test1.jpg')img[0:100, 100:200, 0] = 255
img[100:200, 200:300, 1] = 255
img[200:300, 300:400, 2] = 255cv2.imshow("img", img)
cv2.waitKey()
更改图像某一矩形区域的像素值也很方便:
import cv2
import numpy as npimg = cv2.imread(r'C:\Users\Desktop\test1.jpg')
img[0:50, 1:100] = (0, 0, 255)cv2.imshow("img", img)
cv2.waitKey()
7. 图像三通道分离和合并
import cv2
import numpy as npimg = cv2.imread(r'C:\Users\Desktop\test1.jpg')b, g, r = cv2.split(img)# b = cv2.split(img)[0]
# g = cv2.split(img)[1]
# r = cv2.split(img)[2]merged = cv2.merge([b, g, r])cv2.imshow("Blue", b)
cv2.imshow("Green", g)
cv2.imshow("Red", r)cv2.imshow("Merged", merged)
cv2.waitKey()
8. 抓取摄像头
import cv2
import numpy as npcap = cv2.VideoCapture(0)for i in range(0, 19):print(cap.get(i)) while(1):ret, frame = cap.read()hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)lower_blue = np.array([100, 47, 47])upper_blue = np.array([124, 255,255])mask = cv2.inRange(hsv, lower_blue, upper_blue) #蓝色掩模res = cv2.bitwise_and(frame, frame, mask = mask)cv2.imshow(u"Capture", frame)cv2.imshow(u"mask", mask)cv2.imshow(u"res", res)key = cv2.waitKey(1)if key & 0xff == ord('q') or key == 27:print(frame.shape,ret)breakcap.release()
cv2.destroyAllWindows()