Python+OpenCV 获取图像属性、兴趣ROI区域、简单通道处理

获取图像的属性。

1、获取图像的形状。

a、shape 获取图像的形状。彩色图像返回包含的行数、列数、通道数的元组。
b、size  获取图像的像素数目,彩色图像返回行数*列数的值。
c、dtype  获取图像的数据类型,一般返回uint8.

实例代码:

import cv2
img = cv2.imread("img/test.jpg", cv2.IMREAD_UNCHANGED)
#获取图像形状
print(img.shape)
#显示图像
cv2.imshow("python", img)
# 获取像素数目
print(img.size)
#获取图像类型
print(img.dtype)
#等待显示
cv2.waitKey(0)
cv2.destroyAllWindows()

在这里插入图片描述

获取感兴趣区域(ROI)

ROI:(Region of Interest)表示感兴趣区域。它是指从被处理图像以方框、圆形、椭圆、不规则多边形等方式勾勒出需要处理的区域。可以通过各种算子(Operator)和函数求得感兴趣ROI区域,并进行图像的下一步处理,被广泛应用于热点地图、人脸识别、图像分割等领域。
1、通过像素矩阵来获取ROI区域。
所用原图(img/test.jpg)

import cv2
import numpy as np
#读取图片
img = cv2.imread("img/test.jpg", cv2.IMREAD_UNCHANGED)
#定义200*100矩阵 3对应BGR
face = np.ones((200, 100, 3))
#显示原始图像
cv2.imshow("ceshi", img)
#显示ROI区域
face = img[200:400, 200:300]
cv2.imshow("ROI", face)
#等待显示
cv2.waitKey(0)
cv2.destroyAllWindows()

在这里插入图片描述

图像通道处理

1、通道拆分
OpenCV读取的彩色图像由B、G、R三原色组成,可以通过下面代码获取不同的通道。
b = img[:, :, 0]
g = img[:, :, 1]
r = img[:, :, 2]
也可以使用split()函数拆分通道,下面是拆分不同通道再显示的代码。
实例代码:

import cv2
img = cv2.imread("img/wu.jpgtest.jpg", cv2.IMREAD_UNCHANGED)
#拆分通道
b, g, r = cv2.split(img)
#显示原始图像
cv2.imshow("B", b)
cv2.imshow("G", g)
cv2.imshow("R", r)          
#等待显示
cv2.waitKey(0)
cv2.destroyAllWindows()

运行结果;
在这里插入图片描述
2、通道合并: 调用merge()函数实现!

import cv2
import numpy as np

#读取图片
img = cv2.imread("img/test.jpg", cv2.IMREAD_UNCHANGED)

#拆分通道
b, g, r = cv2.split(img)

#合并通道
m = cv2.merge([b, g, r])
cv2.imshow("test", m)
           
#等待显示
cv2.waitKey(0)
cv2.destroyAllWindows()

运行结果:
在这里插入图片描述
改写以上程序;

把  m = cv2.merge([b, g, r])  改为 m = cv2.merge([r, g, b])

运行结果如下:
在这里插入图片描述

原因:   OpenCV是按照BGR进行读取的图像的。

3、提取图像的不同颜色。
提取b颜色通道——————g、r 通道设置为0
实例代码:

import cv2
import numpy as np

#读取图片
img = cv2.imread("img/test.jpg", cv2.IMREAD_UNCHANGED)
rows, cols, chn = img.shape

#拆分通道
b = cv2.split(img)[0]
g = np.zeros((rows,cols),dtype=img.dtype)
r = np.zeros((rows,cols),dtype=img.dtype)

#合并通道
m = cv2.merge([b, g, r])
cv2.imshow("test", m)
           
#等待显示
cv2.waitKey(0)
cv2.destroyAllWindows()

运行结果:
在这里插入图片描述
提取g颜色通道——————b r 通道设置为0
实例代码:

import cv2
import numpy as np

#读取图片
img = cv2.imread("img/test.jpg", cv2.IMREAD_UNCHANGED)
rows, cols, chn = img.shape

#拆分通道
b=np.zeros((rows,cols),dtype=img.dtype)
g = cv2.split(img)[1]
r = np.zeros((rows,cols),dtype=img.dtype)

#合并通道
m = cv2.merge([b, g, r])
cv2.imshow("test", m)
           
#等待显示
cv2.waitKey(0)
cv2.destroyAllWindows()

运行结果:
在这里插入图片描述
提取r颜色通道——————b g 通道设置为0
实例代码:

import cv2
import numpy as np

#读取图片
img = cv2.imread("img/test.jpg", cv2.IMREAD_UNCHANGED)
rows, cols, chn = img.shape

#拆分通道
b=np.zeros((rows,cols),dtype=img.dtype)
g=np.zeros((rows,cols),dtype=img.dtype)
r = cv2.split(img)[2]

#合并通道
m = cv2.merge([b, g, r])
cv2.imshow("test", m)
           
#等待显示
cv2.waitKey(0)
cv2.destroyAllWindows()

运行结果:
在这里插入图片描述

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小小Java开发者

“是一种鼓励,你懂的”

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值