ComfyUI中的图像拼接处理

本文详细介绍了在ComfyUI中如何使用常见的多图处理节点,如图像拼接、设置羽化效果、边框以及图像填充和混合等,适合AI和图形处理初学者学习。
摘要由CSDN通过智能技术生成

如果你想把两张图片拼在一起,就用下面这个图像联结节点,如下

默认就是把两张图片左右拼在一起,我们想要上下拼在一起呢?我们就把方向设置为下,如下

上面是直接拼在一起的,我们还想要个羽化效果呢?用下面这个节点,可以设置羽化值,如下

看到没有,图像相接处有羽化效果的

还有下面这个节点也可以把多张图片拼在一起,如下

它不仅可以拼接两张图片,它可以一次性拼接四张图片的,如下

拼接的时候还可以设置边框,如下

更多好玩且实用AIGC工作流和节点

星球号:32767063

本期资料链接

往期学习资料

整理AI学习资料库

【保姆级教程】ComfyUI中常见的十几种多图处理节点,包括图像填充、图像拼接、图像混合等等

  • 14
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
import cv2 as cv import numpy as np def cv_show(name,img): cv.imshow(name,img) cv.waitKey(0) cv.destroyAllWindows() def detectAndDescribe(image): gray = cv.cvtColor(image,cv.COLOR_BGR2GRAY) sift = cv.xfeatures2d.SIFT_create() (kps,features)=sift.detectAndCompute(image,None)#这里的kps是一个特征点对象,,属性有.pt关键点坐标 #.angle关键点方向 .response响应强度 .size该点的直径大小 kps = np.float32([kp.pt for kp in kps])#此刻得到kps特征点对象每一个特征点的坐标。 return (kps,features) def matchKeypoints(kpsA,kpsB,features1,features2,ratio): bf = cv.BFMatcher() rawMatches = bf.knnMatch(features1,features2,2)#rawMatcher是一个Dmatch型对象,属性有.distance描述符间距离 #.trainIdx样本图像特征点标识符,.queryIdx测试图像的特征点标识符,.imgIdx训练图像的索引 matches = [] for m,n in rawMatches: if m.distance 4: pts1 = np.float32([kpsA[i] for (_,i) in matches])#将测试图像的坐标储存到Pts1里 pts2 = np.float32([kpsB[i] for (i,_) in matches])#将样本图像的坐标储存到pts2里 # 计算视角变换矩阵H #参数一,测试图像的特征点坐标,参数二,样本图像的特征点坐标,参数三,RANSAC算法: #RANSCA原理, 因为拟合一条直线只需要两个点,因此我们每次随机选取两个点,做出直线,划定一个距离,判断落在直线周围距离范围点的个数, # 不断的迭代,直到找出拟合的直线,使得点落在上面最多的拟合曲线 #参数四:参数范围1~10,原图像的点经过变换后点与目标图像上对应点的误差,超过了就是outlier (H, status) = cv.findHomography(pts1, pts2, cv.RANSAC, 5) return (matches, H, status) return None imageA = cv.imread("E:/opencv/picture/right1.jpg") imageB = cv.imread("E:/opencv/picture/left1.png") (kpsA,features1)=detectAndDescribe(imageA) (kpsB,features2)=detectAndDescribe(imageB) M = matchKeypoints(kpsA, kpsB, features1, features2, 0.75) (matches, H, status) = M # 将图片A进行视角变换,result是变换后图片 result = cv.warpPerspective(imageA, H, (imageA.shape[1] + imageB.shape[1], imageB.shape[0])) cv_show('result1',result) result[0:imageB.shape[0], 0:imageB.shape[1]] = imageB cv_show('result2', result) 经常遇到的一个错误: new style getargs format but argument is not a tuple 针对这句代码:result = cv.warpPerspective(imageA,M,[imageA.shape[1]+imageB.shape[1],max(imageA.shape[0],imageB.shape[0])]) 原因是size那个参数应该是tuple(),而不是list[]。即应该是()而不是[]。 下面讲一下这个案例的大体过程: 1.首先我们是通过SIFT算法找到两张图(right,left)的特征点及特征向量,并把特征点的坐标储存起来。 2.通过蛮力匹配算法的得到kWmatches对象,将kWmatches对象的queryIdx和trainIdx给存起来,其features1对应的图像为样本图像 3.求出样本图像的特征点坐标和测试图像的特征点坐标,找出这两坐标矩阵的H变换公式(利用RANSAC算法),将H变换公式对right图像做透视变换,得到拼接后的右边图像 4.将left原图赋给result对应的ROI区域,大功告成。
根据提供的引用内容,我了解到图像拼接在实际应用场景非常广泛,而图像配准是整个图像拼接的核心。下面是Halcon图像拼接算子: 1. `mosaic_image`算子:该算子可以将多个图像拼接成一个大的全景图像。该算子需要输入待拼接的图像和它们之间的变换矩阵,输出拼接后的全景图像。 示例代码如下: ```Halcon mosaic_image(ImageList, HomMat3DList, MosaicImage) ``` 其,`ImageList`是待拼接的图像列表,`HomMat3DList`是每个图像之间的变换矩阵列表,`MosaicImage`是拼接后的全景图像。 2. `gen_mosaic_image_param`算子:该算子可以生成用于拼接图像的参数。该算子需要输入待拼接的图像和它们之间的变换矩阵,输出用于拼接图像的参数。 示例代码如下: ```Halcon gen_mosaic_image_param(ImageList, HomMat3DList, 'default', MosaicParam) ``` 其,`ImageList`是待拼接的图像列表,`HomMat3DList`是每个图像之间的变换矩阵列表,`'default'`表示使用默认参数,`MosaicParam`是用于拼接图像的参数。 3. `mosaic_images`算子:该算子可以将多个图像拼接成一个大的全景图像。该算子需要输入待拼接的图像和它们之间的变换矩阵,输出拼接后的全景图像。 示例代码如下: ```Halcon mosaic_images(ImageList, HomMat2DList, 'average', MosaicImage) ``` 其,`ImageList`是待拼接的图像列表,`HomMat2DList`是每个图像之间的变换矩阵列表,`'average'`表示使用平均值法拼接图像,`MosaicImage`是拼接后的全景图像。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值