opencv中graphcut的奇怪结果

时间:2015-05-26 13:07:44

标签: c++ opencv

我在stackoverflow中找到了代码并进行了一些更改,但结果很奇怪,掩码全是白色或全黑。现在我想知道如何使用GraphCut查找两个重叠的两个图像之间的seeam线。谢谢!

int main()
{    
     Mat image0=imread("F:\\1\\1.jpg");
     Mat image1=imread("F:\\1\\2.jpg");
     image0.convertTo(image0,CV_32F,1.0/255.0);
     cv::imshow("image0",image0);
     image1.convertTo(image1,CV_32F,1.0/255.0);
     // our corners are just at (0,0)
     cv::Point corner1;
     corner1.x = 0;
     corner1.y = 0;

     cv::Point corner2;
     corner2.x = 0;
     corner2.y = 0;

     std::vector<cv::Point> corners;

     corners.push_back(corner1);
     corners.push_back(corner2);

     std::vector<cv::Mat> masks;
     //Mat imageMask0;
     //Mat imageMask1;
     Mat imageMask0(image0.size(),CV_8U);
     imageMask0(Rect(0,0,imageMask0.cols,imageMask0.rows)).setTo(255);
     Mat imageMask1(image1.size(),CV_8U);
     imageMask1(Rect(0,0,imageMask1.cols,imageMask1.rows)).setTo(255);
     masks.push_back(imageMask0);
     masks.push_back(imageMask1);

     std::vector<cv::Mat> sources;

     sources.push_back(image0);
     sources.push_back(image1);

     cv::detail::GraphCutSeamFinder *seam_finder = new cv::detail::GraphCutSeamFinder();
     seam_finder->find(sources, corners, masks);
     cv::imshow("mask",masks[1]);
     masks[0].convertTo(masks[0],CV_8UC3,255);
     cv::imwrite("F:\\1\\998.jpg",masks[0]);
     masks[1].convertTo(masks[1],CV_8UC3,255);
     cv::imwrite("F:\\1\\999.jpg",masks[1]);
     printf("%lu\n", masks.size());
     //for(int i = 0; i < masks.size(); i++)
     //{
     //     std::cout << "MASK = "<< std::endl << " "  << masks.at(i) << std::endl << std::endl;
     // }
     cv::waitKey();
      return 0;
}

然后如何修复代码以使其正确。

0 个答案:

没有答案