浅尝OpenCV-Python
文章目录
1.显示图片
1.1相关函数说明
函数 | 说明 |
---|---|
cv2.imread(filename) | filename为对应读取的图片名称 |
cv2.imshow(winname,matrix) | winname为展示的名称,matrix为图片的矩阵点 |
cv2.waitKey(time) | 当参数小于等于0或者为空,表示一直等待按键。当参数大于0则表示显示对应的时间,单位为毫秒 |
1.2 cv2.imread()支持的读取模式
Mode | Description |
---|---|
cv2.IMREAD_COLOR | 默认选项,彩色三通道BGR图像 |
cv2.IMREAD_GRAYSCALE | 8位灰度图像 |
cv2.IMREAD_ANYCOLOR | 具体取决于文件的元文件,上述两种都可 |
cv2.IMREAD_UNCHANGED | 读取所有通道图像数据,包括第四通道的透明度通道 |
cv2.IMREAD_ANYDEPTH | 加载原始深度的灰度图像,提供16位的灰度图像 |
`cv2.IMREAD_ANYDEPTH | cv2.IMREAD_COLOR` |
cv2.IMREAD_REDUCED_GRAYSCALE_2 | 加载原始分辨率1/2的灰度图像 |
cv2.IMREAD_REDUCED_COLOR_2 | 加载每个通道BGR图像,分辨率为1/2 |
randomByteArray = bytearray(os.urandom(120000))#图像数据默认为8位,而1byte位8位
# flatNumpyArray = np.array(randomByteArray)
#也可通过numpy生成随机numpy数组,255也即8位数表达最大数字,150000为像素点
flatNumpyArray=np.random.randint(0,256,150000)
grayImage=flatNumpyArray.reshape(500,300)
# 将150000像素点转为500*300像素的灰度图片
cv2.imwrite('RandomGray.png', grayImage)
# 将150000像素点转为500*100*3像素的彩色三通道图片
bgrImage = flatNumpyArray.reshape(500, 100, 3)
cv2.imwrite('RandomColor.png', bgrImage)
img = cv2.imread("1.jpg")
cv2.imshow('Output', img)
cv2.waitKey()
![image-20220410220341479](https://gitee.com/Miracle_Fan/figure-beds/raw/master/img/image-20220410220341479.png)
2. 缩放图片
Resize()
函数 | 说明 |
---|---|
cv2.resize(src,dsize) | src为读取的图片矩阵,dsize为缩放像素 |
img = cv2.resize(img, (300, 300))
cv2.imshow('Size',img)
3. 高斯模糊图片
GaussianBlur()
cv2.GaussianBlur(SRC,ksize,sigmaX)
第三个参数为高斯核标准误差,数值越大,模糊程度越高。
blur = cv2.GaussianBlur(img, (15 , 15),10)
cv2.imshow('Blur', blur)
4.灰度图
cvtcolor()
将图像从一个颜色空间转换到另一个颜色空间的转换;cv2.COLOR_BGR2GRAY为灰度空间
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
cv2.imshow('Gray', gray)
5.Canny边缘检测
cv2.Canny()
参数img,threshold1,threshold2. image 为 8 位输入图像。threshold1 表示处理过程中的第一个阈值。 threshold2 表示处理过程中的第二个阈值
canny = cv2.Canny(img, 125, 175)
cv2.imshow('Canny', canny)
6.读取视频
函数 | 说明 |
---|---|
cv2.VideoCapture() | 同imread |
cap.read() | 返回第一个参数为bool值,判断读取帧数是否正常;第二个参数为所读取帧的图片 |
cap = cv2.VideoCapture("1.mp4")
while True:
success, img = cap.read()
cv2.imshow("Video", img)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap = cv2.VideoCapture(0)
while True:
success, img = cap.read()
img = cv2.Canny(img, 125, 175)
cv2.imshow("Video", img)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
7.绘制UI图形
blank = np.zeros((500, 500, 3), dtype='uint8')
cv2.imshow('Blank', blank)
# # 绘制小方块
blank[200:300, 300:400] = (255, 0, 0) # BGR
cv2.imshow('Green', blank)
# 绘制矩形
cv2.rectangle(blank, (0, 0), (250, 250), (0, 255, 0), thickness=2)
cv2.imshow('Rectangle', blank)
# 绘制圆形
cv2.circle(blank, (blank.shape[1] // 2, blank.shape[0] // 2), 40, (0, 0, 255), thickness=1)
cv2.imshow('Circle', blank)
# 绘制直线
cv2.line(blank, (0, 0), (blank.shape[1] // 2, blank.shape[0] // 2), (255, 255, 255), thickness=1)
cv2.imshow('Line', blank)
# 输出文本
cv2.putText(blank, 'Hello World', (255, 255), cv2.FONT_HERSHEY_TRIPLEX, 1.0, (0, 255, 0), 2)
cv2.imshow('Text', blank)
cv2.waitKey(0)