opencv-python 图像最简单拼接

本文介绍如何使用Python通过OpenCV库实现根据预设坐标截取图片,并对截图进行处理,如添加元素,然后将处理后的图像无缝拼回原图的过程。具体步骤包括读取原图、截图、编辑和拼接,适用于自动化图像处理任务。
摘要由CSDN通过智能技术生成

使用场景:根据固定左上、右下、坐标点进行标准矩形截图,对截图进行你想要的处理,再拼接回去。

很多时候我们需要使用代码自动进行图像的某一部分处理,处理之后还要再拼接回来,为了避免手动重复工作

原图如下:

在这里插入图片描述

截图后:

在这里插入图片描述

截图后处理:粉色的小星星是我自己画的

在这里插入图片描述

最后拼接回去

在这里插入图片描述

实现代码:

截图部分:

import cv2


def cv_show(neme, img):
    # 调整宽高(再次运行也只会加载你调整后的宽高)
    # cv2.namedWindow(neme, cv2.WINDOW_NORMAL)
    cv2.imshow(neme, img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()


# 读取图像
img = cv2.imread("T.jpg")

# 第一张 左上 右下 坐标点
# 565 7
# 696 177
x1, y1, x2, y2 = 565, 7, 696, 177

# 截图 y1 y2 x1 x2
image1 = img[y1:y2, x1:x2]

# 存储 截图 左上 右下 坐标
with open("xy.txt", "w") as f:
    f.write("{} {} {} {} ".format(x1, y1, x2, y2))

cv_show("1", image1)

cv2.imwrite("T0.jpg", image1)
print("图像裁剪完成")

拼接截图:

import cv2
import numpy as np
import os

def cv_show(neme, img):
    # cv2.namedWindow(neme, cv2.WINDOW_NORMAL)
    cv2.imshow(neme, img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()


# 读取原图的大小
img = cv2.imread("T.jpg")

# 读取截图
img1 = cv2.imread("T1.jpg")

# 创建一个纯黑的大图
mage = np.zeros((img.shape[0], img.shape[1], 3), np.uint8)

# 读取截图的坐标
with open("xy.txt", "r") as f:
    data = f.read()
    # print(data)

# 默认空格分割
x1, y1, x2, y2 = data.split()
# print(x1, y1, x2, y2)

# # 将要拼接的两张图像覆盖到大图上
# 截图顺序y1 y2 x1 x2
mage[:] = img
mage[int(y1):int(y2), int(x1):int(x2)] = img1

cv_show("s", mage)
# 保存图像
cv2.imwrite('T2.jpg', mage)
# 删除xy.txt
os.remove("xy.txt")
print("图像拼接完成")
### 回答1: 图像拼接是将多张图像拼接成一张大图的过程。在使用OpenCVPython进行图像拼接时,可以使用cv2库中的函数cv2.hconcat()和cv2.vconcat()来实现水平和垂直拼接。首先需要读取要拼接图像,然后使用这两个函数进行拼接,最后保存拼接后的图像即可。需要注意的是,拼接图像大小和通道数必须相同。 ### 回答2: OpenCV Python是一个强大的计算机视觉库,它可以在Python程序中进行图片处理,包括拼接图像图像拼接是将多张图像拼接成一张大图像的过程。它通常被使用在全景图像的创建或者是物体的跟踪上。OpenCV Python库提供了多种方法来实现图像拼接,以下是一个基本的步骤: 1. 读取图片:使用cv2.imread()函数读取需要拼接的图片。 2. 寻找特征点:使用SIFT(尺度不变特征转换)算法找到图片中的特征点。 3. 匹配特征点:使用cv2.FlannBasedMatcher()函数将特征点进行匹配。 4. 计算变换矩阵:使用cv2.findHomography函数计算变换矩阵。 5. 将图像拼接:使用cv2.warpPerspective()函数将图像拼接起来。 代码示例: ``` import cv2 img1 = cv2.imread("image1.jpg") img2 = cv2.imread("image2.jpg") # create SIFT detector sift = cv2.xfeatures2d.SIFT_create() # detect key points and calculate descriptors kp1, des1 = sift.detectAndCompute(img1, None) kp2, des2 = sift.detectAndCompute(img2, None) # Flann-based matching matcher = cv2.FlannBasedMatcher() matches = matcher.knnMatch(des1, des2, k=2) good_matches = [] for m, n in matches: if m.distance < 0.5 * n.distance: good_matches.append(m) # calculate Homography matrix if len(good_matches) > 10: src_pts = np.float32([kp1[m.queryIdx].pt for m in good_matches]).reshape(-1, 1, 2) dst_pts = np.float32([kp2[m.trainIdx].pt for m in good_matches]).reshape(-1, 1, 2) M, mask = cv2.findHomography(src_pts, dst_pts, cv2.RANSAC, 5.0) # stitch images dst = cv2.warpPerspective(img1, M, (img1.shape[1] + img2.shape[1], img1.shape[0])) dst[0:img2.shape[0], img1.shape[1]:img1.shape[1] + img2.shape[1]] = img2 cv2.imshow("Stitched Image", dst) cv2.waitKey() ``` 这是一个基本的图像拼接过程,但在实际应用中,由于图像的角度、光照、噪声等因素的影响,需要对算法做更多的优化和改进,以达到更好的效果。 ### 回答3: OpenCV是一种开源计算机视觉库,可用于图像处理、视觉特征识别、视频处理、对象检测等应用领域。在其中,图像拼接是最为常见的应用之一,可以将多张图像合并成一张大图像。 针对PythonOpenCV,实现图像拼接的方法主要为以下三种: 1. 使用numpy库中的concatenate函数:首先将图片读进来,然后使用concatenate函数将图片拼接起来。该方法比较简单,但是需要注意的是,图片必须按照一定的顺序进行拼接。 2. 使用OpenCV中的函数hconcat和vconcat:PythonOpenCV库提供了两个函数,hconcat函数可用于将多张图片水平拼接,vconcat函数可用于将多张图片竖直拼接。使用该方法需要注意的是,图片的大小要是一致的,否则拼接后将会出现空白部分。 3. 使用OpenCV中的函数warpPerspective:该方法主要用于将不同角度或者位置的图片拼接在一起。该方法需要先进行图片的对齐处理,使其在同一平面上,然后使用warpPerspective函数进行透视变换,将多张图片拼接起来。 总体来说,使用PythonOpenCV实现图像拼接需要注意图片的大小、位置和角度等因素,选用合适的拼接方法,最终得到完整的并在一起的大图像
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

默执_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值