python + openCV图像处理(三)

引言

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

本篇文章将介绍 图像运算图像融合图像类型转换图像缩放 四个部分。

示例图片

color.jpg
在这里插入图片描述
xiaoxin.png
在这里插入图片描述
monkey.png
在这里插入图片描述

代码

1、图像运算

原理:

其中,numpy加法 为 取模加法。
在这里插入图片描述
openCV加法 为 饱和运算。
在这里插入图片描述
注意:参与运算的图像大小、类型必须一致

import cv2
import numpy as np

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

result1 = a + b # numpy加法
result2 = cv2.add(a,b) # openCV加法

cv2.imshow("original",a) # 原图
cv2.imshow("result1",result1) 
cv2.imshow("result2",result2)
cv2.waitKey(0)
cv2.destroyAllWindows()

效果图:
在这里插入图片描述
可以看到,取模运算(numpy)图片保留的细节比较丰富,而饱和运算(openCV)图片细节丢失,亮度很高。


2、图像融合

import cv2

a = cv2.imread(r"C:\workspace\python\openCV\xiaoxin.png",cv2.IMREAD_UNCHANGED)
b = cv2.imread(r"C:\workspace\python\openCV\monkey.png",cv2.IMREAD_UNCHANGED)

result = cv2.addWeighted(a,0.3,b,0.6,0) # 务必注意:a 和 b 形状必须相同,例如:都是 50*50 像素
cv2.imshow("xiaoxin",a)
cv2.imshow("monkey",b)
cv2.imshow("mix",result)
cv2.waitKey()
cv2.destroyAllWindows()

addWeighted(a,x1,b,x2,light) - 将 a和b 两个图像分别按照x1,x2比重叠加在一起,light表示亮度

效果图:
在这里插入图片描述
请叫他 monkey 新!!!!


3、图像类型转换

import cv2

a = cv2.imread(r"C:\workspace\python\openCV\xiaoxin.png",cv2.IMREAD_UNCHANGED)
b = cv2.cvtColor(a,cv2.COLOR_BGR2GRAY) # 转换为 灰度图像

cv2.imshow("xiaoxin",a)
cv2.imshow("sadxin",b)
cv2.waitKey(0)
cv2.destroyAllWindows()
# cv2.imwrite(r"C:\workspace\python\openCV\sadxin.png",b) #保存悲伤的小新
  • cv2.COLOR_BGR2GRAY - BGR TO GRAY
  • cv2.COLOR_BGR2RGB - BGR TO RGB
  • cv2.COLOR_GRAY2BGR - GRAY TO BGR

另外,openCV里还提供了200多种不同类型之间的转换。

tips:将 灰度 转化为 BGR图像,看起来两个都是灰色的,但是调用shape会发现,BGR是三通道。


4、图像缩放


import cv2

a = cv2.imread(r"C:\workspace\python\openCV\xiaoxin.png",cv2.IMREAD_UNCHANGED)
rows,cols,chn = a.shape

# b = cv2.resize(a,(200,100)) # 1、调整 a图像 的大小为 200 * 100
b = cv2.resize(a,(round(rows * 0.5),round(cols * 1.5))) # 2、调整 a图像 的列宽为原来的0.5被,行宽为原来的1.5倍
# b = cv2.resize(a,None,fx=0.5,fy=1.5) # 3、调整 a图像 的列宽为原来的1倍,行宽为原来的0.3倍

cv2.imshow("a",a) 
cv2.imshow("b",b)

cv2.waitKey(0)
cv2.destroyAllWindows()

b = cv2.resize(i,dsize,fx,fy) - 有4个参数(前2个必须有),i 表示目标图片,dsize 表示具体的长和宽,fx 表示长的比例,fy 表示宽的比例

效果图:

在这里插入图片描述

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 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、付费专栏及课程。

余额充值