簡體   English   中英

圖像拼接攪拌器圖像格式

[英]Image stitching blender image format

我在C ++中使用帶有貢獻的OpenCV 3.1。 嘗試重新創建“使用OpenCV學習圖像處理pg 152-161”中概述的程序。我逐行復制了代碼,但遇到此錯誤。

//-Create a blender-//S10
    Ptr<Blender> blender = Blender::createDefault(blend_type,false);
    Size dst_sz = resultRoi(corners, sizes).size();
    float blend_width = sqrt(static_cast<float>(dst_sz.area()))* blend_strength / 100.f;
    if(blend_width < 1.f){
        blender = Blender::createDefault(Blender::NO,false);
    }
    else if(blend_type == Blender::MULTI_BAND){
        MultiBandBlender* mb = dynamic_cast<MultiBandBlender*>(blender.get());
        mb->setNumBands(static_cast<int>(ceil(log(blend_width)/log(2.))-1.));
        cout << "Multi-band blender, number of bands: " << mb->numBands() << endl;
    }
    else if(blend_type == Blender::FEATHER){
        FeatherBlender* fb = dynamic_cast<FeatherBlender*>(blender.get());
        fb->setSharpness(1.f/blend_width);
        cout << "Feather blender, sharpness: " << fb->sharpness() << endl;
    }
    blender->prepare(corners,sizes);
    //-Compositing step-//S11
    cout << "Composting..." << endl;
    t = getTickCount();
    Mat img_warped, img_warped_s;
    Mat dilated_mask, seam_mask, mask, mask_warped;
    for(int img_idx = 0; img_idx < num_images; img_idx++){
        cout << "Compositing image #" << indices[img_idx]+1 << endl;

        //-Read image and resize it if necessary-//S11.1
        full_img = imread(img_names[img_idx]);
        if(abs(scale - 1)> 1e-1){
            resize(full_img, img, Size(),scale,scale);
        }
        else{
            img = full_img;
        }
        full_img.release();
        Size img_size = img.size();

        Mat K;
        cameras[img_idx].K().convertTo(K, CV_32F);

        //-Warp the current image-//S11.2
        warper->warp(img,K,cameras[img_idx].R,INTER_LINEAR,BORDER_REFLECT,img_warped);
        //Warp the current image mask
        mask.create(img_size, CV_8U);
        mask.setTo(Scalar::all(255));
        warper->warp(mask,K,cameras[img_idx].R,INTER_NEAREST,BORDER_CONSTANT,mask_warped);

        //-Compenstae exposure error step-//S11.3
        compensator->apply(img_idx,corners[img_idx],img_warped,mask_warped);
        img_warped.convertTo(img_warped, CV_16S);
        img_warped.release();
        img.release();
        mask.release();

        dilate(masks_warped[img_idx], dilated_mask, Mat());
        resize(dilated_mask, seam_mask, mask_warped.size());
        mask_warped = seam_mask & mask_warped;

        //-Blending images step-//S11.4
        blender->feed(img_warped_s,mask_warped,corners[img_idx]);
    }

該問題在最后一行說:

錯誤:(-215)img.type()== CV_16SC3 || img.type()==函數feed中的CV_8UC3

作為img,mask和tl中的blender :: feed函數任務,我認為問題出在img img_warped變量,並嘗試將其轉換為CV_16SC3和CV_8UC3類型,但是沒有用。 任何幫助表示贊賞。

如評論中所述,我沒有填充img_warped_s

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM