Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python opencv的翘曲预测未给出准确的结果_Python_Opencv_Image Stitching - Fatal编程技术网

Python opencv的翘曲预测未给出准确的结果

Python opencv的翘曲预测未给出准确的结果,python,opencv,image-stitching,Python,Opencv,Image Stitching,我想缝合两个有部分重叠区域的图像,我正在使用OpenCV。在使用orb和flann匹配关键点并找到单应性后,我执行了扭曲透视,但没有得到所需的结果。我不明白我做错了什么我对这个很陌生请帮忙。 我正在附上密码 # -*- coding: utf-8 -*- import numpy as np import cv2 from matplotlib import pyplot as plt def rotated(img): (h,w)=img.shape[:2] center=

我想缝合两个有部分重叠区域的图像,我正在使用OpenCV。在使用orb和flann匹配关键点并找到单应性后,我执行了扭曲透视,但没有得到所需的结果。我不明白我做错了什么我对这个很陌生请帮忙。 我正在附上密码

    # -*- coding: utf-8 -*-
import numpy as np
import cv2
from matplotlib import pyplot as plt
def rotated(img):
   (h,w)=img.shape[:2]
   center=(w / 2,h / 2)
   m=cv2.getRotationMatrix2D(center,359.5,1)
   rotate=cv2.warpAffine(img,m,(w,h))
   plt.imshow(rotate)
   plt.show()
   return rotate



d=(600,400)
img2= cv2.imread('G:/mca6thsem/bulletsimages/a31/a22/5500k/land2_part1.jpeg')
img1 = cv2.imread('G:/mca6thsem/bulletsimages/a31/a22/5500k/land2prt2.jpeg')
img1=cv2.resize(img1,d)
img1=rotated(img1)
img2=cv2.resize(img2,d)
img2=rotated(img2)
orb = cv2.ORB_create()
kp, des= orb.detectAndCompute(img1, None)
kp1, des1 = orb.detectAndCompute(img2, None)




imgor = cv2.drawKeypoints(img1,kp,None,color=(0,255,0))
imgor1 = cv2.drawKeypoints(img2,kp1,None,color=(0,255,0))
#flann
FLANN_INDEX_LSH=0
index_params= dict(algorithm = FLANN_INDEX_LSH,
                   table_number = 6, # 12
                   key_size = 12,     # 20
                   multi_probe_level = 1) #2
search_params = dict(checks=30)
flann = cv2.FlannBasedMatcher(index_params,search_params)

matches = flann.knnMatch(np.float32(des),np.float32(des1),k=2)



good = []
for m,n in matches:
    if m.distance < 0.9*n.distance:
        good.append(m)

if len(good)>10:
    src_pts = np.float32([ kp[m.queryIdx].pt for m in good ]).reshape(-1,1,2)
    dst_pts = np.float32([ kp1[m.trainIdx].pt for m in good ]).reshape(-1,1,2)
    M, mask = cv2.findHomography(src_pts, dst_pts, cv2.RANSAC,5.0)
    matchesMask = mask.ravel().tolist()
    h = img1.shape[1]
    w= img1.shape[0]




dst = cv2.warpPerspective(img2,M,(img2.shape[1] + img1.shape[1], img2.shape[0]))
dst[0:img1.shape[0],0:img1.shape[1]]=img1

draw_params = dict(matchColor = (0,255,0), # draw matches in green color
                   singlePointColor = None,
                   matchesMask = matchesMask, # draw only inliers
                   flags = 2)

img3 = cv2.drawMatches(img1,kp,img2,kp1,good,None,**draw_params)

plt.imshow(img3, 'gray'),plt.show()
#im1Reg=cv2.resize(im1Reg,d)
plt.imshow(dst, 'gray'),plt.show()
#-*-编码:utf-8-*-
将numpy作为np导入
进口cv2
从matplotlib导入pyplot作为plt
def旋转(img):
(h,w)=图像形状[:2]
中心=(w/2,h/2)
m=cv2.getRotationMatrix2D(中心,359.5,1)
旋转=cv2。翘曲仿射(img,m,(w,h))
plt.imshow(旋转)
plt.show()
回程旋转
d=(600400)
img2=cv2.imread('G:/mca6thsem/bulletsimages/a31/a22/5500k/land2_part1.jpeg'))
img1=cv2.imread('G:/mca6thsem/bulletsimages/a31/a22/5500k/land2prt2.jpeg'))
img1=cv2。调整大小(img1,d)
img1=旋转(img1)
img2=cv2。调整大小(img2,d)
img2=旋转(img2)
orb=cv2.orb_create()
kp,des=orb.detectAndCompute(img1,无)
kp1,des1=orb.detectAndCompute(img2,无)
imgor=cv2.绘图关键点(img1,kp,无,颜色=(0255,0))
imgor1=cv2.绘图关键点(img2,kp1,无,颜色=(0255,0))
#法兰
法兰指数=0
索引参数=dict(算法=法兰索引),
表#编号=6,#12
钥匙尺寸=12,#20
多探头(水平=1)2
搜索参数=dict(检查=30)
flann=cv2.FlannBasedMatcher(索引参数、搜索参数)
matches=flann.knnMatch(np.float32(des),np.float32(des1),k=2)
好的=[]
对于匹配中的m,n:
如果m.距离<0.9*n.距离:
好。追加(m)
如果len(良好)>10:
src_pts=np.float32([kp[m.queryIdx].pt代表m处于良好状态])。重塑(-1,1,2)
dst_pts=np.float32([kp1[m.trainIdx].pt代表m处于良好状态])。重塑(-1,1,2)
M、 掩模=cv2.findHomography(src_pts,dst_pts,cv2.RANSAC,5.0)
matchesMask=mask.ravel().tolist()
h=img1.形状[1]
w=img1.形状[0]
dst=cv2.0(img2,M,(img2.shape[1]+img1.shape[1],img2.shape[0]))
dst[0:img1.shape[0],0:img1.shape[1]=img1
绘制参数=dict(匹配颜色=(0255,0),#绘制绿色的匹配
singlePointColor=无,
matchesMask=matchesMask,#只绘制内线
旗帜=2)
img3=cv2.绘图匹配(img1、kp、img2、kp1、良好、无、**绘图参数)
plt.imshow(img3,‘灰色’),plt.show()
#im1Reg=cv2.调整大小(im1Reg,d)
plt.imshow(dst,'gray'),plt.show()

您的warpPerspective工作正常,但您没有获得足够的关键点匹配,使warp的结果符合您的需要。尝试使用不同的关键点检测器(如Brisk、KAZE或AKAZE)和不同的关键点匹配器(如Brute Force或K-近邻)。

如果需要混合覆盖(在解决关键点问题后),请参阅感谢u Aaron的建议我对AKAZE KAZE和Brisk感到厌倦,但我得到的结果与问题中提到的相同。看起来您尝试缝合在一起的图像非常相似,openCV无法获得足够丰富的关键点来执行所需的操作。我想你可以通过创建蒙版图像来解决这个问题,在这里你可以找到关键点,描述符,过滤匹配,计算单应性等,但是一旦所有这些计算都找到了,然后你把这些图像传给你的原始图像拼接在一起。谢谢Aaron…我怀疑我没有完全理解你创建面具图像的意思?你的意思是说用其他图像屏蔽我试图粘贴的图像…创建两个与上面两个图像相同宽度和像素高度的图像,并用关键点和描述符在这些图像上找到匹配项。在那之后,找到单应矩阵,但不是将你创建的两个图像缝合在一起,而是将计算从遮罩图像传递到你试图缝合在一起的实际图像,然后它应该可以工作。Araon我发现扭曲透视在我的情况下不起作用…所以我可以得到(x,y)从关键点开始,然后将一个图像转换为另一个图像,在公共区域上彼此重叠?