永兴的笔记-OpenCV-1基本操作

OpenCV是什么?
OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉库,可以运行在Linux、Windows、Android和Mac OS操作系统上。它轻量级而且高效——由一系列 C 函数和少量 C++ 类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。
本文专栏将会与您一起学习OpenCV-Python

#建议在pip中安装OpenCV-python
pip install opencv-python
#也可中anconda环境中安装
conda install opencv

图片建议单击打开阅读:
在这里插入图片描述

1、图像的读取:
cv2.imread(filename,flags=None)

  • filename : 图片的路径
  • flags : 读取模式
flags 描述
cv2.IMREAD_COLOR 加载三通道彩色图像,忽略透明度
cv2.IMREAD_GRAYSCALE 灰度模式加载图像
cv2.IMREAD_UNCHANGED 使用alpha通道加载图像,显示图像的透明度和半透明度(4通道)

阿尔法通道:是指一张图片的透明和半透明度。一个使用32位存储的图片,每8位表示红绿蓝,和阿尔法通道。在这种情况下,就不光可以表示透明还是不透明,阿尔法通道还可以表示256级的半透明度。
2、图像的显示:
cv2.imshow(winname,mat)

  • winname :图像显示的窗口名
  • mat :需要显示的图片的对象名

3、等待任意按键:
cv2.waitKey(delay=None)

  • delay : 延时的时间
    当 dalay = 0 :表示 forever 永不退出
    dalay 的单位为: 毫秒
    ord(c )
  • c:字符
    转换为 Unicode 值
    在这里插入图片描述
    ESC键的 ASCLL 值为 27
    #图像等待 delay>0: 延时 单位为毫秒 delay<=0: 无限等待键盘输入

4、关闭窗口:
关闭所有窗口:
cv2.destroyAllWindows()
关闭指定窗口:
destroyWindows(wname)

5、图像的保存:
cv2.imwrite(filename,img,params=None)

  • filename : 文件夹的路径
  • params:此参数针对特定的图片格式
    对于JPEG,其表示的是图像的质量,用0-100的整数表示,默认为95。 注意,cv2.IMWRITE_JPEG_QUALITY类型为Long,必须转换成int
    PNG,第三个参数表示的是压缩级别。cv2.IMWRITE_PNG_COMPRESSION,从0到9,压缩级别越高,图像尺寸越小。默认级别为3:
import cv2
img1 = cv2.imread("first.jpg")
cv2.imshow("windowsimg1",img1)
print(chr(27))
k = cv2.waitKey()
if k == 27 :
    print("1")
    cv2.destroyAllWindows()
elif k == ord('s'):
    cv2.imwrite("second.jpg",img1)
    cv2.destroyAllWindows()

6、图像通道的分离与合并:
一般情况下图片通道的排序为:RGB 。 但是在OpenCV中默认的排序为 BGR
分离通道:
cv2.split(m,mv=None)

  • m:需要分离通道的图像对象
import cv2
img = cv2.imread("first.jpg",cv2.IMREAD_UNCHANGED)
b,g,r = cv2.split(img) #彩色图像三通道,灰度图像单通道
cv2.imshow("b",b)
cv2.imshow("g",g)
cv2.imshow("r",r)
cv2.waitKey()
cv2.destroyAllWindows()

7、获取图像属性:
image.shape
(行数,列数,通道数)
image.size
输出图像像素总和

import cv2
img = cv2.imread("first.jpg",cv2.IMREAD_UNCHANGED)
print(img.shape)
print(img.size)

生成全0数组:
np.zeros(shape,dtype=float)

  • shape:数组的属性
  • dtype:类型

8、合并通道
cv2.merge(mv,dst=None)

  • mv:合并的通道
import cv2
import numpy as np
img = cv2.imread("first.jpg",cv2.IMREAD_UNCHANGED)
zreo = np.zeros(img.shape[:2],dtype="uint8") #大小与img图像相同的生成二阶全0数组
#格式为uint8否则imshow不能显示
b,g,r = cv2.split(img)
cv2.imshow("blue",cv2.merge([b,zreo,zreo]))
cv2.imshow("green",cv2.merge([zreo,g,zreo]))
cv2.imshow("red",cv2.merge([zreo,zreo,r]))
cv2.waitKey()
cv2.destroyAllWindows()

5、ROI感兴趣区域:
简单来说就是进行图像数组切片,获取感兴趣区域

import cv2
img = cv2.imread("first.jpg")
imgROI = img[123:412,234:879] #设置感兴趣区域
cv2.imshow("ROI",imgROI)
cv2.waitKey()
cv2.destroyAllWindows()

练习题:
分别以彩色模式和灰度模型读取一幅图像,分离出彩色图像的RGB通道得到3副图像,然后依次显示出4副图像,显示图像时按s保存图像,图像名称为该图像的颜色,最后合成通道显示彩色图像,按 “q”键关闭后,然后显示你感兴趣的RIO区域,按ESC键关闭。最后输出图像的属性。

评论出你的答案

发布了45 篇原创文章 · 获赞 28 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/m0_43505377/article/details/103746264