python图像处理(三)——获取图像属性、感兴趣区域ROI及通道处理

一、获取图像属性

1.形状-shape

通过shape关键字获取图像形状,返回值为图像行数,列数以及通道数的元组。

import cv2

image = cv2.imread("灰度图像”)

print(image.shap)

#(512,512)

 

import cv2

image = cv2.imread("彩色图像”)

print(image.shap)

#(512,512,3)

 

import cv2

#获取图片
image = cv2.imread('E:/pythonProject/xin.jpeg',cv2.IMREAD_UNCHANGED)

#获取图像形状
print(image.shape)

#显示图像
cv2.imshow("demo",image)

#等待窗口
cv2.waitKey(0)
cv2.destroyAllWindows()

#写入图片
cv2.imwrite('E:/pythonProject/xin0.jpeg')

输出结果为422行、470以及3通道数:

(422, 470, 3)

python图像处理(三)——获取图像属性、感兴趣区域ROI及通道处理_第1张图片

2.像素-size

通过关键字四size来获取图像总像素。灰度图像返回值为行数*列数的值,彩色图像返回值为行数*列数*通道数得值

核心代码为

print(image.size)

3.图像类型-dtype

通过关键字dtype通常来获取图像的数据类型,一般返回值为uint8

核心代码为

print(image.dtype)

import cv2

#获取图片
image = cv2.imread('E:/pythonProject/xin.jpeg',cv2.IMREAD_UNCHANGED)

#获取图像形状
print(image.shape)

#获取像素数目
print(image.size)

#获取图像dtype
print(image.dtype)

#显示图像
cv2.imshow("demo",image)

#等待窗口
cv2.waitKey(0)
cv2.destroyAllWindows()

#写入图片
cv2.imwrite('E:/pythonProject/mei0.jpeg')

输出结果如下:

(422, 470, 3)
595020
uint8

二、获取感兴趣区域ROI

ROI(region of interest),感兴趣区域。机器视觉、图像处理中,从被处理的图像以方框、圆、椭圆、不规则多边形等方式勾勒出需要处理的区域,称为感兴趣区域,ROI。在Halcon、OpenCV、Matlab等机器视觉软件上常用到各种算子(Operator)和函数来求得感兴趣区域ROI,并进行图像的下一步处理。

1.获取ROI区域

通过像素矩阵可以直接获得ROI区域

核心代码

import cv2

strawerry = image[100:300,300:500]

image[200:400,400:600]=strawerry

import cv2
import numpy as np

#获取图片
image = cv2.imread('E:/pythonProject/mei.jpeg',cv2.IMREAD_UNCHANGED)

#定义一个300*300的矩阵 3为通道数
strawberry = np.ones((200,200,3))

#显示原始图片
cv2.imshow("demo",image)

#显示ROI区域
strawberry = image[100:300,300:500]
cv2.imshow("berries",strawberry)

#等待窗口
cv2.waitKey(0)
cv2.destroyAllWindows()

输出结果显示:

python图像处理(三)——获取图像属性、感兴趣区域ROI及通道处理_第2张图片

2.ROI区域融合

将获取的ROI区域融合到固定位置,如左上角

import cv2
import numpy as np

#获取图片
image = cv2.imread('E:/pythonProject/mei.jpeg',cv2.IMREAD_UNCHANGED)

#定义一个200*200的矩阵 3为通道数
strawberry = np.ones((200,200,3))

#原图片输出
# cv2.imshow("demo1",image)

#感兴趣区域ROI融合
strawberry = image[100:300,300:500]
image[0:200,0:200] = strawberry
cv2.imshow("berries",image)

#等待窗口
cv2.waitKey(0)
cv2.destroyAllWindows()

j结果显示如下

python图像处理(三)——获取图像属性、感兴趣区域ROI及通道处理_第3张图片

将两张图像融合,只需再读取一张图片即可,原理与前面相似

import cv2
import numpy as np

#获取图片
image = cv2.imread('E:/pythonProject/mei.jpeg',cv2.IMREAD_UNCHANGED)
test = cv2.imread('E:/pythonProject/xin.jpeg',cv2.IMREAD_UNCHANGED)

#定义一个200*200的矩阵 3为通道数
strawberry = np.ones((200,200,3))

#原图片输出
cv2.imshow("demo1",image)

#感兴趣区域ROI融合
strawberry = image[150:250,350:450]
test[220:320,320:420] = strawberry
cv2.imshow("berries",test)

#等待窗口
cv2.waitKey(0)
cv2.destroyAllWindows()

输出结果如下

python图像处理(三)——获取图像属性、感兴趣区域ROI及通道处理_第4张图片

三、图像通道处理

在Photoshop中有一个很重要概念叫图像通道,在RGB色彩模式下就是指那单独的红色、绿色、蓝色部分。也就是说,一幅完整的图像,是由红色绿色蓝色三个通道组成的。他们共同作用产生了完整的图像imp

1.通道拆分

OpenCV里面的图像通道是BGR,通过split()函数进行通道拆分。

import cv2

#读取图片
image = cv2.imread('E:/pythonProject/xin.jpeg',cv2.IMREAD_UNCHANGED)

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

#显示原图像
cv2.imshow("B",b)
cv2.imshow("G",g)
cv2.imshow("R",r)

#等待窗口
cv2.waitKey(0)
cv2.destroyAllWindows()

输出结果如下所示

python图像处理(三)——获取图像属性、感兴趣区域ROI及通道处理_第5张图片

2.合并通道

OpenCV里面的通道是BGR,现将通道拆分,然后再合并成RGB通道 

import cv2

#读取图片
image = cv2.imread('E:/pythonProject/xin.jpeg',cv2.IMREAD_UNCHANGED)

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

#合并通道
m = cv2.merge([r,g,b])
cv2.imshow("Merge",m)

#等待窗口
cv2.waitKey(0)
cv2.destroyAllWindows()

输出结果如下

python图像处理(三)——获取图像属性、感兴趣区域ROI及通道处理_第6张图片

若把BGR换成BGR,则合成图与原图一样

python图像处理(三)——获取图像属性、感兴趣区域ROI及通道处理_第7张图片

可以只提取RGB图像中的某一个颜色,其他颜色可设为0

获取B颜色通道,将GR通道设为0

import cv2
import numpy as np

#读取图片
image = cv2.imread('E:/pythonProject/xin.jpeg',cv2.IMREAD_UNCHANGED)
rows, cols, chn = image.shape

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

#合并通道
m = cv2.merge([b,g,r])
cv2.imshow("Mrege",m)

#等待窗口
cv2.waitKey(0)
cv2.destroyAllWindows()

输出结果过下

python图像处理(三)——获取图像属性、感兴趣区域ROI及通道处理_第8张图片

获取R通道颜色,将其他通道设为0

python图像处理(三)——获取图像属性、感兴趣区域ROI及通道处理_第9张图片

 

绿色通道修改方法与上述相同

本文参考该博主文章,如有不足之处请多多见谅

 

你可能感兴趣的:(opencv,python)