opencv 拼接不工作与cv2与不同种类的图像

esyap4oy  于 2023-08-06  发布在  其他
关注(0)|答案(1)|浏览(178)

我试图使拼接tif图片,但它不工作,它不来自代码:

import cv2
image_paths=['LFMstar_6.png','LFMstar_7.png']
# initialized a list of images
imgs = []
  
for i in range(len(image_paths)):
    imgs.append(cv2.imread(image_paths[i]))
    #imgs[i]=cv2.resize(imgs[i],(0,0),fx=0.4,fy=0.4)
    # this is optional if your input images isn't too large
    # you don't need to scale down the image
    # in my case the input images are of dimensions 3000x1200
    # and due to this the resultant image won't fit the screen
    # scaling down the images 
# showing the original pictures
cv2.imshow('1',imgs[0])
cv2.imshow('2',imgs[1])

stitchy=cv2.Stitcher.create()
(dummy,output)=stitchy.stitch(imgs)
  
if dummy != cv2.STITCHER_OK:
  # checking if the stitching procedure is successful
  # .stitch() function returns a true value if stitching is 
  # done successfully
    print("stitching ain't successful")
else: 
    print('Your Panorama is ready!!!')

字符串
我尝试了jpg格式的图片,它的工作完美,但不是与我的...也许我的图片之间的重叠不工作?我的tif图片目前是140x140像素。我把图片转换成RGB和JPG格式,但没有改变任何东西。这里有一个我的形象的例子。
谢谢你的好意
enter image description here
enter image description here

cgvd09ve

cgvd09ve1#

回答您的问题:您的图像没有足够的重叠或没有包含足够的“关键点”,因此OpenCV无法确定它们如何组合在一起。
通过稍微修改你的代码,你可以(稍微)了解更多关于进程失败的原因。具体来说,您应该使用stitch函数(在code you are using中称为dummy)提供的返回代码。
检查返回值通常是一个很好的做法。OpenCV通常不会引发Python异常,所以这是知道什么时候出错的唯一方法。

import cv2
err_dict = {
    cv2.STITCHER_OK: "STITCHER_OK",
    cv2.STITCHER_ERR_NEED_MORE_IMGS: "STITCHER_ERR_NEED_MORE_IMGS",
    cv2.STITCHER_ERR_HOMOGRAPHY_EST_FAIL: "STITCHER_ERR_HOMOGRAPHY_EST_FAIL",
    cv2.STITCHER_ERR_CAMERA_PARAMS_ADJUST_FAIL: "STITCHER_ERR_CAMERA_PARAMS_ADJUST_FAIL",
}

image_paths = ['LFMstar_6.jpg', 'LFMstar_7.jpg']

imgs = [cv2.imread(p) for p in image_paths]

stitchy = cv2.Stitcher.create()
(retval, output) = stitchy.stitch(imgs)

if retval != cv2.STITCHER_OK:
    print(f"stitching falied with error code {retval} : {err_dict[retval]}")
    exit(retval)
else:
    print('Your Panorama is ready!!!')
    success = cv2.imwrite("result.jpg", output)
    if not success:
        print("but could not be saved to `result.jpg`")

字符串
使用您提供的图像,STITCHER_ERR_NEED_MORE_IMGS的错误代码为1
由于某种原因,OpenCV无法在图像之间找到足够多的无歧义的共同特征(“关键点”),以便将它们拼接在一起。这可能是由于图像的小尺寸,或相对线性的设计,或平坦的颜色,如果不访问缝合器的内部图像处理管道,真的很难知道。
由于您的图像确实有一些重叠,并且它们之间似乎没有任何失真或偏移,因此使用更简单的方法(例如,将它们连接起来)应该相对简单。自相关)。图像如此之小的事实也意味着这种方法的计算费用将是合理的。

相关问题