opencv&python图片基础操作

基本名词和库

通道:R,G,B 彩色图、灰度图、二值图

import cv2 as cv

import matplotlib.pyplot as plt

improt numpy as np

一、图像读取

#读取图像 第一个参数:图片路径  第二个参数cv.IMREAD_COLOR(1)表示按彩色读进来,
#cv.IMREAD_GRAYSCALE(0)表示按灰色读进来,cv.IMREAD_UNCHANGED(-1)表示无损读进来,多一个alpha通道
#如果不设置,默认按彩色读进来
img = cv.imread(yahboom.jpg,cv.IMREAD_UNCHANGED) #img 是一个uint8型的数组 BGR

二、图像显示

1、用opencv自带的函数显示

#opencv方式显示图像,打开的是一个单独的窗口,这个窗口有时会在后层,需要将当前窗口最小化后才能看到,不是很方便
   #另外其需要配合waitKey使用,因为这是个死等函数,所以后面的不会执行
cv.imshow(show, img)#第一个参数,显示窗口的名称;第二个参数,待显示的图像
cv.waitKey(0) #延时等待,单位毫秒,传入0表示按任意健时间到
cv.destroyWindow(show) #关闭指定窗口  cv.destroyAllWindows() #关闭所有窗口

2、用jupyter Lab控件显示

#bgr8转jpeg格式
import enum
import cv2

def bgr8_to_jpeg(value, quality=75):
    return bytes(cv2.imencode(.jpg, value)[1])

#导入窗口控件
import ipywidgets.widgets as widgets
#创建一个窗口控件实例
image_widget = widgets.Image(format=jpg, width=800, height=800)
display(image_widget) #显示一个大小为800*800的jpeg图片显示空窗口
image_widget.value = bgr8_to_jpeg(img)#给窗口赋值图片,因为用CV2读出来是bgr8格式的,所以需要进行转换

3、用matplotlib显示

#需要先进行颜色变换
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
#是嵌入在jutyperlab窗口中显示的,有坐标轴
plt.imshow(img)
plt.show()

三、图像复制

copy_img=img.copy()

四、图像保存

cv.imwrite(yahboom1.jpg, img) # 1 保存的文件名 2 要保存的对象

五、图像大小改变

img = cv2.imread(yahboom.jpg)
# 常用写法1
img_test1 = cv2.resize(img, (宽度, 高度))
# 常用写法2,不指定宽,高,按缩放比例指定
img_test2 = cv2.resize(img, (0, 0), fx=0.25, fy=0.25, interpolation=cv2.INTER_NEAREST)

六、图像色彩变换

img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
img = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)

七、图像像素操作

####常用属性##########
img.shape  #返回的是height,width和3
type(img)  #返回img的数据类型 numpy.ndarray
img.size   #返回像素点的个数
img.dtype  #返回img每个像素数据类型 dtype(uint8)

#截取感兴趣的区域
part=img[0:50,0:100]   #截取感兴趣的区域,第一个是高度方向,第二个是宽度方向

#颜色通道拆分和合并
b,g,r=cv.split(img)
print(b.shape)
img=cv.merge((b,g,r))
print(img.shape)

#只保留某一个通道,比如红色通道
copy_img=img.copy()
copy_img[:,:,0]=0
copy_img[:,:,1]=0

#获取和设置某一个像素点的值
(b,g,r) = img[100,100]
img[50,100]=(255,255,255)

经验分享 程序员 微信小程序 职场和发展