opencv用来做什么
对数据进行预处理和后处理。相比于PIL来说,opencv能够实现的功能更多
核心操作
opencv拿来做什么
对数据进行预处理和后处理。相比于PIL来说,opencv能够实现的功能更多
常见的图像
1.在图像中有宽,高,通道等概念。我们常见的图像格式有bmp(位图),jpg,png
bmp:是一种原始的图像格式,存储的空间非常高
图像压缩:有损和无损。一般是通过傅里叶变换,将时域转频域然后去掉一些东西得到的。
jpg:jpg是对bmp的图像进行有损压缩后得到的。
png:jpg一般是三通道(w,w,c),png一般是四通道(h,w,c,a)通道a代表透明度。
图像读取
1.读取图片
import cv2
img=cv2.imread(r"路径")#可以设置读出的格式
cv2.imshow("pic",img)#数据类型是np.ndarray
cv2.waitKey(0)#读出的是HWC
2.写图像
import numpy as np
import cv2
img=np.empty((200,200,3),np.uint8)
img[...,0]=255#...表示前面的维度都保留,取索引为0的通道
img[...,1]=0#读出来的为bgr,和一般的rgb有差别
img[...,2]=0
img=img[...,::-1]#将图像转为RGB格式,numpy数组操作
cv2.imwrite("img_save.jpg",img)
3.视频读取
import cv2
cap=cv2.VideoCapture("F:\\1.mp4")#读取摄像头,视频,或者给一个rtsp的视频流
while True:
'''
视频是由图片一帧一帧组合而成的
所以用一个循环来一帧一帧读取视频图片
ret表示是否读取成功
frame表示读取出来的图像
'''
ret,frame=cap.read()
cv2.imshow("frame",frame)
if cv2.waitKey(10)&0xFF==ord("q"):#读取一张图片之后等待的时间和一个监听按键
break
cap.release()
cv2.destroyAllWindows()
色彩空间与转换
HSV颜色空间
HSV格式中,H(色彩/色度),S(饱和度),V(亮度),可以用来表示一种颜色的深浅度,HSV的像素是连续的。
对比度:对亮度进行操作
在每一个像素上进行一个乘法运算即乘以a,再加上一个b
import cv2
src = cv2.imread(r"1.jpg")
# dst = cv2.cvtColor(src, cv2.COLOR_BGR2GRAY)
# dst = cv2.cvtColor(src, cv2.COLOR_BGR2HSV)
# print(dst.shape)
dst2 = cv2.convertScaleAbs(src, alpha=6, beta=1)#alpha为进行放大的倍数
cv2.imshow("src show", src)
cv2.imshow("dst show", dst2)
cv2.waitKey(0)
画图
图像坐标是满足笛卡尔坐标系的
import cv2
import numpy as np
img = cv2.imread(r"1.jpg")
'''
thickness设置为-1,表示图形的填充
'''
cv2.line(img, (100, 30), (210, 180), color=(0, 0, 255), thickness=2)
cv2.circle(img, (50, 50), 30, (0, 0, 255), 2)
cv2.rectangle(img, (100, 30), (210, 180), color=(0, 0, 255), thickness=2)
cv2.ellipse(img, (100, 100), (100, 50), 0, 0, 360, (255, 0, 0