当前位置:   article > 正文

OpenCV将两张图片拼接成一张图片_opencv 图片拼接

opencv 图片拼接

  • 可以用opencv或者numpy的拼接函数,直接将两张图拼接到一起,很简单方便,参考代码2,推荐此方式
  • 新建图片,将两张图片的像素值填充到新图片对应位置上即可,参考代码1。

示例代码1

以下是将两张图片拼接成一张图片的示例代码:

import cv2
import numpy as np 

# 三通道
img1 = cv2.imread('image1.jpg')
img2 = cv2.imread('image2.jpg')

# 确定两张图片的大小
height, width, channels = img1.shape
new_width = width + img2.shape[1]

# 创建一张新的图片
new_img = np.zeros((height, new_width, channels), dtype=np.uint8)

# 将第一张图片复制到新图片的左侧
new_img[:,:width,:] = img1

# 将第二张图片复制到新图片的右侧
new_img[:,width:,:] = img2

# 显示合并后的图片
cv2.imshow('Merged Image', new_img)

# 等待关闭窗口
cv2.waitKey(0)

# 释放资源
cv2.destroyAllWindows()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28

示例代码2

以下是将两张图片在同一个窗口显示的示例代码:

import cv2
import numpy as np 

img1 = cv2.imread('image1.jpg')
img2 = cv2.imread('image2.jpg')

## 使用numpy
# 将两张图片垂直堆叠
img_vstack = np.vstack((img1, img2))

# 将两张图片横向拼接在一起
result = np.hstack([img1, img2])

# 将两张图片拼接到一起
img = np.concatenate((img1, img2), axis=1)

## 使用opencv
vimg = cv2.vconcat((img1, img2)) # 垂直方向
himg = cv2.hconcat((img1, img2)) # 水平方向

# 显示图片
cv2.imshow('Two Images in One Window', img_vstack)
cv2.waitKey(0)
cv2.destroyAllWindows()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24

代码示例3

首先需要安装 xlrdxlwt 模块,可以使用以下命令安装:

pip install xlrd
pip install xlwt
  • 1
  • 2

然后可以使用以下代码将图片写入 Excel 单元格内,并调整单元格大小与图片匹配:

import xlwt
import xlrd
from PIL import Image

# 打开 Excel 文件
book = xlwt.Workbook(encoding='utf-8')
sheet = book.add_sheet('Sheet1')

# 打开图片文件,并设置图片大小
img = Image.open('image.jpg')
img_width, img_height = img.size

# 设置单元格宽度和高度与图片宽度和高度一致
sheet.col(0).width = img_width
sheet.row(0).height = img_height

# 将图片写入单元格
sheet.insert_bitmap('image.jpg', 0, 0)

# 保存 Excel 文件
book.save('image.xls')
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

此代码是将一张名为 image.jpg 的图片写入 Excel 的第一行第一列的单元格内,并设置单元格宽度和高度与图片宽度和高度一致。保存 Excel 文件的名字为 image.xls。如果需要批量处理多张图片,可以使用循环语句来遍历所有图片。

示例代码4

以下是一个示例代码,可以实现将指定文件夹内所有图片路径及其对应的图片插入到指定的Excel表格内,并调整单元格大小以适应图片大小:

import os
from openpyxl import Workbook
from openpyxl.utils import get_column_letter
from openpyxl.drawing.image import Image

# 设置文件夹路径和Excel文件名
folder_path = r"C:\folder_path"
excel_file = "images.xlsx"

# 创建Excel工作簿
wb = Workbook()
ws = wb.active

# 获取文件夹内所有图片路径和文件名
img_files = [f for f in os.listdir(folder_path) if f.endswith('.jpg') or f.endswith('.png')]

# 将文件名和路径分别写入Excel单元格
for i, img_file in enumerate(img_files):
    row = i + 1
    img_path = os.path.join(folder_path, img_file)
    ws.cell(column=1, row=row, value=img_file)
    ws.cell(column=2, row=row, value=img_path)

    # 将图片插入Excel单元格并调整单元格大小
    img = Image(img_path)
    img_width, img_height = img.width, img.height
    ws.row_dimensions[row].height = img_height / 3  # 调整行高
    ws.column_dimensions[get_column_letter(3)].width = img_width / 6  # 调整列宽

	# 将图片添加到单元格中
    cell = sheet.cell(row=i+1, column=1)
    cell.value = img_path 
    cell.alignment = openpyxl.styles.Alignment(horizontal='center', vertical='center')
    # cell._style = openpyxl.styles.NamedStyle(name='Hyperlink', 
    #                                          hyperlink=f'HYPERLINK("{image_path}")')
    ws.add_image(img, f"C{row}")  # 在指定单元格添加图片

# 保存Excel文件
wb.save(excel_file)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39

在上述代码中,我们使用了openpyxl库来处理Excel表格,并使用os库来获取指定文件夹内的所有图片文件路径和文件名。对于每个图片文件,我们将其文件名和路径分别写入Excel单元格的第1列和第2列,然后将该图片插入Excel单元格的第3列并调整单元格大小以适应图片大小。最后保存Excel文件。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/81222
推荐阅读
相关标签
  

闽ICP备14008679号