opencv python 基础入门(1)

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

注意: 由于历史遗留问题,opencv采用BGR模式,而不是RGB。

RGB代表红绿蓝。大多数情况下,RGB颜色存储在结构或无符号整数中,蓝色占据最不重要的“区域”(32位和24位格式的字节),绿色第二少,红色第三少。

BGR是相同的,除了区域顺序颠倒。红色占据最不重要的区域,绿色占第二位(静止),蓝色占第三位。

1、图像读取

cv2.imread(filename, flags=None)
----------------------
imread(filename,flag) 读取图片,返回图片对象
    filename: 图片的路径,即使路径错误也不会报错,但打印返回的图片对象为None
    flag:cv2.IMREAD_COLOR,读取彩色图片,图片透明性会被忽略,为默认参数,也可以传入1
          cv2.IMREAD_GRAYSCALE,按灰度模式读取图像,也可以传入0
          cv2.IMREAD_UNCHANGED,读取图像,包括其alpha通道,也可以传入-1

2、图片性质

import cv2
img = cv2.imread("C:/path/to/image/doge.png")

#rows,cols,channels
img.shape   #返回(280, 450, 3), 宽280(rows),长450(cols),3通道(channels)
#size
img.size    #返回378000,所有像素数量,=280*450*3
#type
img.dtype   #dtype('uint8')

3、像素获取和编辑

#获取和设置
pixel = img[100,100]  #[57 63 68],获取(100,100)处的像素值
img[100,100]=[57,63,99] #设置像素值
b = img[100,100,0]    #57, 获取(100,100)处,blue通道像素值
g = img[100,100,1]    #63 Green通道
r = img[100,100,2]      #68 Red通道
r = img[100,100,2]=99    #设置red通道值

#获取和设置
piexl = img.item(100,100,2)
img.itemset((100,100,2),99)

4、ROI截取

#ROI,Range of instrest
roi = img[100:200,300:400]  #截取100行到200行,列为300到400列的整块区域
img[50:150,200:300] = roi   #将截取的roi移动到该区域 (50到100行,200到300列)
b = img[:,:,0]  #截取整个蓝色通道

b,g,r = cv2.split(img) #截取三个通道,比较耗时
img = cv2.merge((b,g,r))

5、显示图片

cv.imshow('dst', dst)
cv.waitKey(0)
cv.destroyAllWindows()
----------------------------
imshow(winname, mat):显示图片,窗口自适应图片大小
    window_name: 指定窗口的名字
    mat:显示的图片对象
    可以指定多个窗口名称,显示多个图片
    
waitKey(millseconds)  键盘绑定事件,阻塞监听键盘按键,返回一个数字(不同按键对应的数字不同)
    millseconds: 传入时间毫秒数,在该时间内等待键盘事件;传入0时,会一直等待键盘事件
destroyAllWindows(window_name) 
    window_name: 需要关闭的窗口名字,不传入时关闭所有窗口

6、写入图片

imwrite(filename, img, params=None)
    filename:保存的文件名
    img:文件对象