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