python + openCV图像处理(二)

引言

此系列博客记录 网易云课堂 python + openCV图像处理课程的学习过程。

本篇博客将介绍 获取图像属性感兴趣区域ROI通道的拆分与合并 三个部分。


示例图片

color.jpg
在这里插入图片描述
gray.jpg
在这里插入图片描述


代码

1、获取图像属性

import cv2

g = cv2.imread(r"C:\workspace\python\openCV\gray.jpg",cv2.IMREAD_UNCHANGED)  # 灰度图像,单通道

i = cv2.imread(r"C:\workspace\python\openCV\color.jpg",cv2.IMREAD_UNCHANGED) # BGR图像,三通道

print(g.shape) #结果 (27, 120)
print(i.shape) #结果 (27, 120, 3)

print(g.size) #结果 3240
print(i.size) #结果 9720

print(g.dtype) #结果 uint8
print(i.dtype) #结果 unit8

shape属性 - 获取图像的形状,返回包含 (行数、列数、通道数) 的元祖

size属性 - 获取图像的像素数目 = 行数 * 列数 * 通道数

dtype属性 - 获取图像中像素的类型


2、感兴趣区域ROI

ROI(region of interest),感兴趣区域。机器视觉、图像处理中,从被处理的图像以方框、圆、椭圆、不规则多边形等方式勾勒出需要处理的区域,称为感兴趣区域。

import cv2
import numpy as np

a = cv2.imread(r"C:\workspace\python\openCV\color.jpg",cv2.IMREAD_UNCHANGED) # BGR图像,三通道

b = np.ones((27,27,3)) # 新建一个大小为 27 * 27 的BGR图像,默认为黑色(0,0,0)

b[2:10,2:10] = (255,255,255) # 将b中的[2:10,2:10]区域变成白色

a[0:27,0:27] = b # 用 b 图像替换到 a 图像中 [0:27,0:27] 区域

cv2.imshow("demo",b)
cv2.imshow("demo",a)
cv2.waitKey(0)
cv2.destroyAllWindows()

np.ones((27,27,3)) - 实则建立了一个 2727 * 3 的矩阵,不过这里可以表示图像

效果图:

在这里插入图片描述
可以看到原图像的 [0:27,0:27] 区域被替换成了 黑色块,且黑色块中 [2:10,2:10] 区域变成了 白色


3、通道的拆分与合并

import cv2

a = cv2.imread(r"C:\workspace\python\openCV\color.jpg",cv2.IMREAD_UNCHANGED) # BGR图像,三通道

b,g,r = cv2.split(a) # 拆分a图像的三个通道

cv2.imshow("original",a) 
cv2.imshow("Blue",b)
cv2.imshow("Green",g)
cv2.imshow("Red",r)

m = cv2.merge([b,g,r])# 合并a图形的三个通道

cv2.imshow("result",m)
cv2.waitKey(0)
cv2.destroyAllWindows()

cv2.merge([b,g,r]) - 合并通道,若BGR的顺序错误,则与原图不同

import cv2
import numpy as np

a = cv2.imread(r"C:\workspace\python\openCV\color.jpg",cv2.IMREAD_UNCHANGED) # BGR图像,三通道

rows,cols,chn = a.shape # 将a图像的行数、列数、通道数 赋值给三个变量

b = cv2.split(a)[0] # 通过下标指定通道
g = np.zeros((rows,cols),a.dtype) # 新建一个 行列数和类型 与 a图像相同的矩阵
r = np.zeros((rows,cols),a.dtype)

m = cv2.merge([b,g,r])# 合并a图形的三个通道

cv2.imshow("result",m)
cv2.waitKey(0)
cv2.destroyAllWindows()

效果图:

在这里插入图片描述
这个代码会将 初始图像 加一个 蓝色的滤镜

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
以下是一个使用PythonOpenCV进行图像处理的例子: 首先,确保已经安装了PySimpleGUI、cv2和numpy库文件。可以使用以下命令通过pip安装它们: ```shell pip install pysimplegui pip install opencv-python pip install numpy ``` 然后,设计GUI界面。可以使用PySimpleGUI库来实现GUI可视化。以下是一个简单的GUI设计示例: ```python import PySimpleGUI as sg # 创建GUI窗口 layout = [[sg.Image(key='image')]] window = sg.Window('Image Processing', layout, finalize=True) # 打开内置摄像头 cap = cv2.VideoCapture(0) while True: event, values = window.read(timeout=0, timeout_key='timeout') # 实时读取图像 ret, frame = cap.read() # GUI实时更新 imgbytes = cv2.imencode('.png', frame)[1].tobytes() window['image'].update(data=imgbytes) if event == sg.WINDOW_CLOSED: break window.close() ``` 这段代码创建了一个名为"Image Processing"的GUI窗口,其中包含一个用于显示图像的图像框。通过打开内置摄像头,可以实时读取图像,并将其显示在GUI窗口中。当用户关闭窗口时,程序退出。 4、实时图像处理 4.1、阈值值化 阈值值化是一种常用的图像处理技术,可以将图像转换为黑白值图像。以下是一个简单的阈值值化示例: ```python # 读取图像 image = cv2.imread('image.jpg', 0) # 阈值值化 _, binary_image = cv2.threshold(image, 127, 255, cv2.THRESH_BINARY) # 显示结果 cv2.imshow('Binary Image', binary_image) cv2.waitKey(0) cv2.destroyAllWindows() ``` 在这个例子中,首先使用cv2.imread()函数读取一张灰度图像。然后,使用cv2.threshold()函数将图像进行阈值值化处理。最后,使用cv2.imshow()函数显示值化后的图像。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值