python-opencv(1)图像的基础操作

时间:2022-03-21 01:28:39


python-opencv(1)图像的基础操作

文章目录

  • 1. 获取图像的属性
  • 2. 图像ROI
  • 3. 通道的拆分与合并
  • 3.1. 通道的拆分
  • 3.2. 通道的合并
  • 4. 参考

1. 获取图像的属性

  • 形状:行、列、通道数
  • 像素数目
  • 图像的数据类型

shape 可以获取图像的形状,返回包含行数,列数,通道数的元组。

灰度图像 返回行数和列数
彩色图像 返回行数,列数和通道数

size 可以获取图像的像素数目。

灰度图像 返回行数x列数
彩色图像 返回行数x列数x通道数

dtype 返回的是图像的数据类型。

import cv2
img1 = cv2.imread(r"C:\Users\lihuanyu\Desktop\opencv\image\lena256.bmp")

print("形状为:",img1.shape)
print("数目为:",img1.size)
a,b,c = img1.shape
print(a,b,c)
img_color = cv2.imread(r"C:\Users\lihuanyu\Desktop\opencv\image\lenacolor.png")
print("形状为:",img_color.shape)
print("像素数目为:",img_color.size)
print("图像类型:",img_color.dtype)
cv2.imshow("12",img1)
cv2.imshow("color",img_color)
cv2.waitKey(0)
cv2.destroyAllWindows()

结果

形状为: (256, 256, 3)
数目为: 196608
256 256 3
形状为: (512, 512, 3)
像素数目为: 786432
图像类型: uint8

python-opencv(1)图像的基础操作

2. 图像ROI

ROI(region of interest),感兴趣区域。
• 从被处理的图像以方框、圆、椭圆、不规则多边形等方式勾勒出需要处理的区域。
• 可以通过各种算子(Operator)和函数来求得感兴趣区域ROI,并进行图像的下一步处理。

#%%ROI
import cv2
import numpy as np
img1  = cv2.imread(r"C:\Users\lihuanyu\Desktop\opencv\image\lenacolor.png")
img2 = cv2.imread(r"C:\Users\lihuanyu\Desktop\opencv\image\girl.bmp")
cv2.imshow("origial",img1)
cv2.imshow("origial1",img2)
face = img1[220:400,250:350]
img2[200:380,250:350] = face
cv2.imshow("become face",img2)

#cv2.imshow("face",face)
#cv2.imshow("reslust",img1)
cv2.waitKey(0)
cv2.destroyAllWindows()

python-opencv(1)图像的基础操作

3. 通道的拆分与合并

3.1. 通道的拆分

方法有三

'''
#第一种拆分方法
b = img1[:,:,0]
g = img1[:,:,1]
r = img1[:,:,2]
#第二种处分方法
b,g,r = cv2.split(img1)
#第三种拆分方法
b = cv2.split(img1)[0]
g = cv2.split(img1)[1]
r = cv2.split(img1)[2]
'''
#具体代码
import cv2
img1 = cv2.imread(r"C:\Users\lihuanyu\Desktop\opencv\image\lenacolor.png")
print(img1.shape)
#第一种拆分方法
b = img1[:,:,0]
g = img1[:,:,1]
r = img1[:,:,2]
#第二种处分方法
b,g,r = cv2.split(img1)
#第三种拆分方法
b = cv2.split(img1)[0]
g = cv2.split(img1)[1]
r = cv2.split(img1)[2]

cv2.imshow("blue",b)
cv2.imshow("green",g)
cv2.imshow("red",r)
cv2.waitKey(0)
cv2.destroyAllWindows()

python-opencv(1)图像的基础操作

3.2. 通道的合并

通道的合并1
import cv2
img1 = cv2.imread(r"C:\Users\lihuanyu\Desktop\opencv\image\lenacolor.png")
b,g,r = cv2.split(img1)
bgr = cv2.merge([b,g,r])
rgb = cv2.merge([r,g,b])
cv2.imshow("merge_bgr",bgr)
cv2.imshow("merge_rgb",rgb)
cv2.waitKey(0)
cv2.destroyAllWindows()

python-opencv(1)图像的基础操作

#%%通道的合并2
import cv2
img1 = cv2.imread(r"C:\Users\lihuanyu\Desktop\opencv\image\lenacolor.png")
rows,cols,chn = img1.shape
b,_,_ = cv2.split(img1)
g = np.zeros((rows,cols),dtype = b.dtype)
r = np.zeros((rows,cols),dtype = b.dtype) 
img2 = cv2.merge([b,g,r])
cv2.imshow("merge",img2)
cv2.waitKey(0)
cv2.destroyAllWindows()

python-opencv(1)图像的基础操作

4. 参考

Python+OpenCV计算机视觉 - 李立宗