IDE:pycharm、python:3.11、opencv自行参考配置
视频图像的读取与处理
示例代码如下
import cv2
import numpy as np
import matplotlib.pyplot as plt
def cvshow(name,img):
cv2.imshow(name,img)
cv2.waitKey(0)
cv2.destroyAllWindows()
img = cv2.imread("D:\\pycharmyunxing\\qiaoba.jpeg",cv2.IMREAD_GRAYSCALE)
img1 = cv2.imread("D:\\pycharmyunxing\\qiaoba.jpeg",0)
img2 = cv2.imread("D:\\pycharmyunxing\\qiaoba.jpeg",cv2.IMREAD_COLOR)
cvshow("yuan",img)
cvshow("1",img1)
cvshow("2",img2)
cv2.imwrite("名称",img)
这里使用的函数包括cvshow封装的是显示图像的函数imshow()、waitkey()、destroyAllWindows()
-
imshow()
:- 作用: 在窗口中显示图像。
- 用法:
cv2.imshow(window_name, image)
- 参数:
window_name
: 窗口的名称,字符串类型。image
: 要显示的图像,numpy 数组类型。
-
waitKey()
:- 作用: 等待用户按下键盘上的某个键,并返回按下的键的 ASCII 码值。
- 用法:
cv2.waitKey(delay)
- 参数:
delay
: 等待时间,单位为毫秒。如果设置为 0,则会一直等待,直到用户按下某个键。
-
destroyAllWindows()
:- 作用: 关闭所有已打开的窗口。
- 用法:
cv2.destroyAllWindows()
imread()函数
img = cv2.imread(filename, flags=None)
参数说明:
filename
: 图像文件的路径和文件名。flags
: 可选参数,用于指定读取图像的方式。常用的 flags 有:cv2.IMREAD_COLOR
: 以彩色图像的方式读取图像(默认)。cv2.IMREAD_GRAYSCALE
: 以灰度图像的方式读取图像。cv2.IMREAD_UNCHANGED
: 以包含 alpha 通道的方式读取图像。
返回值:
- 如果读取成功,则返回一个 numpy 数组,表示读取到的图像。
- 如果读取失败,则返回
None
。
效果图展示:
fig, axes = plt.subplots(1, 3, figsize=(12, 6))
axes[0].imshow(img)
axes[0].set_title("yuan")
axes[1].imshow(img1)
axes[1].set_title("1")
axes[2].imshow(img2)
axes[2].set_title("1")
plt.show()
这里颜色显示是因为图像通道由RGB变成BGR
print(type(img))
print(img.size)
print(img.dtype)
这段代码用于打印图像的一些基本信息,包括:
- 图像的数据类型
- 图像的大小
- 图像的数据类型
运行结果:
图像融合及加法操作
这里示例图像过大输出打印以前五行像素值为例
image = cv2.imread("D:\\pycharmyunxing\\venv\\image3.png")
image_1 = image+10
print("原图像像素",image[:5,:,0])
print("加法",image_1[:5,:,0])
print("直接加法",(image+image_1)[:5,:,0])
print("add加法",cv2.add(image,image_1)[:5,:,0])
image_2 = cv2.imread("D:\\pycharmyunxing\\venv\\image1.png")
image_2 = cv2.resize(image_2,(1110,870))
image_3 = image+image_2
res = cv2.addWeighted(image,0.4,image_2,0.6,0)
res_1 = cv2.resize(res,(0,0),fx=2,fy=2)
fig, axes = plt.subplots(1, 2, figsize=(12, 6))
axes[0].imshow(res)
axes[0].set_title("yuan")
axes[1].imshow(res_1)
axes[1].set_title("1")
plt.show()
输出:
image_1 = image+10
第一种加法的实现是将所有数值都加10
(image+image_1)[:5,:,0]
第二种是将两张图像的像素值完全相加这里图像的像素中值范围是0~255,两张图像的数值相加中会有超过255的情况这种加法得到的结果是得到的数值%255,即是对于255进行取余。
cv2.add(image,image_1)[:5,:,0]
第三种是使用opencv中add函数进行加法操作它与第二种的区别在于数值超过255的情况时,像素值就是255。
后面时图像融合的操作
这里选用的时两张胸部X射线图(2、3),1和2表示的是融合后的结果和对于融合图像做尺寸变换的结果。
addWeighted()
函数是 OpenCV 中用于将两个图像进行加权融合的函数。它可以将两个图像按照指定的权重进行融合,得到一个新的图像。
dst = cv2.addWeighted(src1, alpha, src2, beta, gamma)
参数说明:
src1
: 第一个输入图像,numpy 数组格式。alpha
: 第一个输入图像的权重。src2
: 第二个输入图像,numpy 数组格式。beta
: 第二个输入图像的权重。gamma
: 融合后图像的偏移量。
返回值:
- 融合后的图像,numpy 数组格式。
这里使用了resize()函数
cv2.resize()
函数是 OpenCV 中用于调整图像大小的函数。这里展示了根据指定的缩放因子或目标大小来调整图像的尺寸和指定图像尺寸两种方式。
image_2 = cv2.resize(image_2,(1110,870))
res_1 = cv2.resize(res,(0,0),fx=2,fy=2)
第一种直接修改我们需要的尺寸。
第二种是按照缩放比例修改
以上述代码中的 res_1 = cv2.resize(res,(0,0),fx=2,fy=2)为例子
可以解释如下:
-
res
: 这是输入图像,即需要调整大小的图像。 -
(0,0)
: 这是目标图像的大小。如果设置为(0,0)
,则表示根据缩放因子来计算目标大小。 -
fx=2
: 水平方向的缩放因子。这里设置为 2,表示水平方向放大 2 倍。 -
fy=2
: 垂直方向的缩放因子。这里设置为 2,表示垂直方向放大 2 倍。
因此,这行代码的作用是将输入图像 res
放大 2 倍,生成一个新的图像 res_1
。