import cv2 import numpy as np import os # 定义文件夹路径和结果保存路径 folder_path = 'D:\wzk\JIEMIAN\images' result_path = 'D:\wzk\JIEMIAN\Result\ORB-pj.jpg' # 获取文件夹内所有图像路径 img_paths = [os.path.join(folder_path, f) for f in os.listdir(folder_path) if f.endswith('.jpg')] # 遍历所有图像,进行配准拼接 result = cv2.imread(img_paths[0]) for i in range(1, len(img_paths)): img = cv2.imread(img_paths[i]) # 将两幅图像转换为灰度图像 gray1 = cv2.cvtColor(result, cv2.COLOR_BGR2GRAY) gray2 = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 提取图像特征点 orb = cv2.ORB_create() kp1, des1 = orb.detectAndCompute(gray1, None) kp2, des2 = orb.detectAndCompute(gray2, None) # 匹配特征点 matcher = cv2.DescriptorMatcher_create(cv2.DESCRIPTOR_MATCHER_BRUTEFORCE_HAMMING) matches = matcher.match(des1, des2) # 选择最佳匹配点 matches = sorted(matches, key=lambda x: x.distance) good_matches = matches[:int(len(matches)*0.15)] # 计算变换矩阵 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) # 拼接图像 result = cv2.warpPerspective(result, M, (result.shape[1] + img.shape[1], result.shape[0])) result[0:img.shape[0], result.shape[1]-img.shape[1]:] = img # 保存拼接结果 cv2.imwrite(result_path, result) # 显示结果 cv2.namedWindow("Result",cv2.WINDOW_NORMAL) cv2.imshow('Result', result) cv2.waitKey(0) cv2.destroyAllWindows()
时间: 2023-06-25 07:03:53 浏览: 52
这段代码使用了OpenCV库实现了ORB特征点匹配和图像拼接的功能。具体步骤如下:
1. 定义文件夹路径和结果保存路径。
2. 获取文件夹内所有图像路径。
3. 遍历所有图像,进行配准拼接。
4. 将两幅图像转换为灰度图像。
5. 提取图像特征点。
6. 匹配特征点。
7. 选择最佳匹配点。
8. 计算变换矩阵。
9. 拼接图像。
10. 保存拼接结果。
11. 显示结果。
需要注意的是,这里使用了RANSAC算法来进行匹配,可以提高匹配的鲁棒性。同时,代码中使用了ORB特征点算法,这是一种基于FAST特征点算法的改进版,可以在保证速度的同时提高匹配精度。
相关问题
import cv2 import numpy as np # 指定存放图片的路径 path = 'f:\\deeplearning\
import cv2是Python中用于调用OpenCV库的模块。OpenCV是一个开源的计算机视觉库,可以用于图像处理、计算机视觉、机器学习等领域。通过import cv2语句,我们可以在Python中使用OpenCV的函数和方法来处理图像和视频数据。
同时,import numpy as np语句是用来导入numpy库,并给它起一个别名np。numpy是Python中用于科学计算的库,提供了大量的数学函数和矩阵运算功能。通过import numpy as np语句,我们可以在Python中使用numpy库中的各种函数和方法来进行数组运算、线性代数运算等操作。
综合起来,import cv2 import numpy as np这句话意味着我们在Python中导入了OpenCV库和numpy库,并分别用cv2和np来表示它们。这样就可以方便地使用OpenCV和numpy库中的各种函数和方法来处理图像数据和进行科学计算。这对于图像处理、计算机视觉、机器学习等领域的开发非常有用。
修改代码:import os from PIL import Image import glob import numpy as np # 遍历文件夹 folder_path = 'E:/机器学习/helefull/labels' folders = os.listdir(folder_path) # print(folders) for filename in glob.glob(r'E:/机器学习/helefull/labels/*.png'): img=Image.open(filename).convert("RGB") # images=np.asarray(img) # print(images) # 只处理其中的20个文件夹 folder for folder in folders[:20]: folder_full_path = os.path.join(folder_path, folder) # print(folder_full_path) if os.path.isdir(folder_full_path): images = os.listdir(folder_full_path) print(images) blank_img = Image.new('RGB', (417, 354), (0, 0, 0)) for i,image_name in images: # 打开当前图片 img_path = os.path.join(folder_full_path, image_name) img = Image.open(img_path) # 遍历每一个像素点 for x in range(img.width): for y in range(img.height): # 如果当前像素点值为255,则将该像素点在空白图片上标记为i+1 if img.getpixel((x, y)) == 255: blank_img.putpixel((x, y), i+100) blank_img.save(f'new_{folder}.png')
import os
from PIL import Image
import glob
import numpy as np
# 遍历文件夹
folder_path = 'E:/机器学习/helefull/labels'
folders = os.listdir(folder_path)
for filename in glob.glob(r'E:/机器学习/helefull/labels/*.png'):
img = Image.open(filename).convert("RGB")
# images=np.asarray(img)
# print(images)
# 只处理其中的20个文件夹
for folder in folders[:20]:
folder_full_path = os.path.join(folder_path, folder)
# print(folder_full_path)
if os.path.isdir(folder_full_path):
images = os.listdir(folder_full_path)
print(images)
blank_img = Image.new('RGB', (417, 354), (0, 0, 0))
for i, image_name in enumerate(images):
# 打开当前图片
img_path = os.path.join(folder_full_path, image_name)
img = Image.open(img_path)
# 遍历每一个像素点
for x in range(img.width):
for y in range(img.height):
# 如果当前像素点值为255,则将该像素点在空白图片上标记为i+1
if img.getpixel((x, y)) == 255:
blank_img.putpixel((x, y), i+100)
blank_img.save(f'new_{folder}.png')
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)