#一.读取图像数据 import cv2 img=cv2.imread("d:/image0.JPG") #读取图片数据 print(img) cv2.imshow('image',img) #显示窗口数据 cv2.waitKey(0) #等待延迟 cv2.destroyAllWindows()
print(img) #打印像素值通道
从这个结果可以出:现在每个像素都由一个三元素组表示,并且每个整型(integer)向量
分别表示一个B,G,R通道。其他色彩空间(如hsv)也以同样地方式来表示像素,只是取值范围和通道数目不同
(例如,hsv)
print(img.shape)#打印通道
读取图像处理
cv2.IMREAD_COLOR:彩色图像
cv2.IMREAD_GRAYSCALE:灰度图像
灰度图像处理
import cv2 as cv import numpy as np img1=cv.imread("d:/image0.JPG",cv.IMREAD_GRAYSCALE) #读取灰图片数据 print(img1) print(img1.shape) cv.imshow('image',img1) #显示窗口数据 cv.waitKey(0) #等待延迟 cv.destroyAllWindows()
结果可以和色彩图像对比
二,数据读取-视频
cv2.VideoCapture可以捕获摄像头,用数字来控制不同的设备,例如0,1。
如果是视频文件,直接指定好路径即可。
import cv2
vc=cv2.VideoCapture(0) #打开摄像头 if vc.isOpened(): #判断摄像头状态 open ,frame=vc.read() else: open=False while open: ret,frame=vc.read() #frame帧率 if frame is None: break if ret==True: gray=cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY) #灰色处理 cv2.imshow("result",gray)
if cv2.waitKey(10)& 0xFF==27:
break
vc.release()
cv2.destroyAllWindows()
读取摄像头并且设置为灰色模式
剪切图像
import cv2 img=cv2.imread("d:/image0.JPG") flower=img[0:200,0:200] #剪切图像 cv2.imshow('image',flower) #显示窗口数据 cv2.waitKey(0) #等待延迟 cv2.destroyAllWindows()
颜色通道地提取只保留r通道
import cv2 img=cv2.imread("d:/image0.JPG") b,g,r=cv2.split(img) print(b) #只保留b结果 cur_img=img.copy() cur_img[:,:,0]=0 cur_img[:,:,1]=0 cv2.imshow('image',cur_img) #显示窗口数据 cv2.waitKey(0) #等待延迟 cv2.destroyAllWindows()
颜色通道地提取只保留g通道
import cv2 img=cv2.imread("d:/image0.JPG") b,g,r=cv2.split(img) print(b) #只保留b结果 cur_img=img.copy() cur_img[:,:,0]=0 cur_img[:,:,2]=0 cv2.imshow('image',cur_img) #显示窗口数据 cv2.waitKey(0) #等待延迟 cv2.destroyAllWindows()
颜色通道地提取只保留b通道
import cv2 img=cv2.imread("d:/image0.JPG") b,g,r=cv2.split(img) print(b) #只保留b结果 cur_img=img.copy() cur_img[:,:,1]=0 cur_img[:,:,2]=0 cv2.imshow('image',cur_img) #显示窗口数据 cv2.waitKey(0) #等待延迟 cv2.destroyAllWindows()
边界填充
BORDER_REPLICATE:复制法,也就是复制最边缘像素。
BORDER_REFLECT:反射法,对感兴趣的图像中的像素在两边进行复制例如:fedcba|abcdefgh|hgfedcb
BORDER_REFLECT_101:反射法,也就是以最边缘像素为轴,对称,gfedcb|abcdefgh|gfedcba
BORDER_WRAP:外包装法cdefgh|abcdefgh|abcdefg
BORDER_CONSTANT:常量法,常数值填充。
import cv2 import matplotlib.pyplot as plt img=cv2.imread("d:/cat.JPG") top_size,bottom_size,left_size,right_size = (50,50,50,50) replicate = cv2.copyMakeBorder(img, top_size, bottom_size, left_size, right_size, borderType=cv2.BORDER_REPLICATE) reflect = cv2.copyMakeBorder(img, top_size, bottom_size, left_size, right_size,cv2.BORDER_REFLECT) reflect101 = cv2.copyMakeBorder(img, top_size, bottom_size, left_size, right_size, cv2.BORDER_REFLECT_101) wrap = cv2.copyMakeBorder(img, top_size, bottom_size, left_size, right_size, cv2.BORDER_WRAP) constant = cv2.copyMakeBorder(img, top_size, bottom_size, left_size, right_size,cv2.BORDER_CONSTANT, value=0) plt.subplot(231), plt.imshow(img, 'gray'), plt.title('ORIGINAL') plt.subplot(232), plt.imshow(replicate, 'gray'), plt.title('REPLICATE') plt.subplot(233), plt.imshow(reflect, 'gray'), plt.title('REFLECT') plt.subplot(234), plt.imshow(reflect101, 'gray'), plt.title('REFLECT_101') plt.subplot(235), plt.imshow(wrap, 'gray'), plt.title('WRAP') plt.subplot(236), plt.imshow(constant, 'gray'), plt.title('CONSTANT') plt.show()
数值计算
import cv2 img=cv2.imread("d:/image0.JPG") img_flower=img+10 #所有通道数值+10 print(img[:5,:,0]) print(".........................") print(img_flower[:5,:,0])
当数值超过256时会以%256地形式展示通道数据
print(".........................")
print((img_flower+img)[:5,:,0])