【opencv】读取cv2.imread()、保存cv2.imwrite()、缩放cv2.resize()、图像融合cv2.addWeighted()

1. 读取图片、保存图片、缩放图片

基于opencv-python==3.4.0

读取:cv2.imread()
保存:cv2.imwrite()
缩放:cv2.resize()
# -*- coding: utf-8 -*-
"""
Created on Thu May 13 10:12:38 2021

@author: zqq
"""

import cv2
import os

# 1. 读取图片
# 1.1 单张
img1 = cv2.imread("ds_ori/pic/doubleskin_134663_1_0.jpg")
print(img1.shape) # 高×宽×通道数
height = img1.shape[0]  # 图片的高
width = img1.shape[1]   # 图片的宽
chanel = img1.shape[2]  # 图片的通道数
print("img height:",height)
print("img width:",width)
print("img chanel:",chanel)

#cv2.imshow("image",img1)

## 颜色通道分离,0 1 2  分别对应(B G R)
#cur_img = img1.copy()
#cur_img[:, :, 1] = 0 # 选取该图像G通道的所有像素点,赋值为0
#cur_img[:, :, 2] = 0
#cv2.imshow('B', cur_img)
#cv2.waitKey(0)
#cv2.destroyAllWindows()
## 此示例分离出 G R两个通道,保留了B (blue)通道,所以图像显示出是蓝色调


# 1.2 多张
imgs_list = os.listdir("ds_ori/pic") # 存入列表

# 循环读取imgs中的文件
# 方法1
for filename in imgs_list:
    print(filename)
# 方法2 
for i in range(len(imgs_list)):
    print(imgs_list[i])
    
# 2. 保存图片
# jpg是被压缩后的图像 
cv2.imwrite('mixup_1/opencv-learn.jpg',img1)  # 写入图片  # 如何设置dpi尚不清楚
cv2.imwrite('mixup_1/opencv-learn.png',img1)  # 写入图片

# 3. 缩放图片
img_resize = cv2.resize(img1,(400,400))
print(img_resize.shape)

2. 融合两张图片

2.1 融合两种不同尺度的图片–方法1
# -*- coding: utf-8 -*-
"""
Created on Wed May 12 09:35:04 2021

@author: zqq
"""

import cv2
import matplotlib.pyplot as plt


img = cv2.imread("ds_ori/pic/doubleskin_134663_1_0.jpg")
print(img.shape) # 500 682 3
img_width = img.shape[1]
img_height = img.shape[0]


img_paste = cv2.imread("ds_small/pic/doubleskindoubleskin_20210315_177240_3_32_0.jpg")
print(img_paste.shape) # 110 147 3
img_paste_width = img_paste.shape[1]
img_paste_height = img_paste.shape[0]

#### 缩放尺寸后融合
# 由于两幅图的尺度不一样,需要将它们缩放到同一尺度
img_paste_dst = cv2.resize(img_paste,(img_width,img_height),interpolation=cv2.INTER_CUBIC) #放大图像
dst = cv2.addWeighted(img,0.4,img_paste_dst,0.6,0) #图像融合, 0.4 * img + 0.6* img_paste_dst + 0
# 保存图片
cv2.imwrite("add_img0.jpg",dst) 
# 显示图片
titles = ['img_paste','img','fusion_img']
imgs = [img_paste,img,dst]
for i in range(len(imgs)):
    plt.subplot(2,3,i+1)
    imgs[i]=cv2.cvtColor(imgs[i],cv2.COLOR_BGR2RGB)
    plt.imshow(imgs[i],'gray')
    plt.title(titles[i])
    plt.axis('off')
plt.show()

在这里插入图片描述

2.2 融合两种不同尺度的图片–方法2
# -*- coding: utf-8 -*-
"""
Created on Wed May 12 09:35:04 2021

@author: zqq
"""

import cv2
import matplotlib.pyplot as plt


img = cv2.imread("ds_ori/pic/doubleskin_134663_1_0.jpg")
print(img.shape) # 500 682 3
img_width = img.shape[1]
img_height = img.shape[0]


img_paste = cv2.imread("ds_small/pic/doubleskindoubleskin_20210315_177240_3_32_0.jpg")
print(img_paste.shape) # 110 147 3
img_paste_width = img_paste.shape[1]
img_paste_height = img_paste.shape[0]

#### 直接融合
# 根据小图像的大小,在大图像上创建感兴趣区域roi(放置位置任意取)
roi = img[0:img_paste_height, 0:img_paste_width] 

#plt.imshow(roi)
#plt.imshow(roi,'gray')

dst2 = cv2.addWeighted(img_paste,0.8,roi,0.2,0) #图像融合
plt.imshow(dst2,'gray')

add_img = img.copy() # 对原图像进行拷贝
add_img[0:img_paste_height, 0:img_paste_width] = dst2  # 将融合后的区域放进原图
#plt.imshow(add_img,'gray')
# 保存图片
cv2.imwrite("add_img1.jpg",add_img)

# 显示图片
titles = ['img_paste','img','add_img']
imgs = [img_paste,img,add_img]
for i in range(len(imgs)):
    plt.subplot(2,3,i+1)
    imgs[i]=cv2.cvtColor(imgs[i],cv2.COLOR_BGR2RGB)
    plt.imshow(imgs[i],'gray')
    plt.title(titles[i])
    plt.axis('off')
plt.show()

在这里插入图片描述

参考

OpenCV_Python图像融合时两张图片大小不一致的解决方法
目标检测数据增强: python-opencv 将一张图片融合到另一张图片中
https://blog.csdn.net/leviopku/article/details/83658767
https://blog.csdn.net/sinat_41104353/article/details/85161174
https://blog.csdn.net/Jakson_poor/article/details/105189739
https://blog.csdn.net/echooozhang/article/details/105128034
https://www.cnblogs.com/silence-cho/p/11027218.html

猜你喜欢

转载自blog.csdn.net/AugustMe/article/details/116699495