C++ opencv中graphcut的奇怪结果
我在stackoverflow中找到了代码并做了一些更改,但结果很奇怪,掩码是全白色或全黑色。现在我想知道如何使用GraphCut在两个重叠的图像之间找到seeam线。谢谢C++ opencv中graphcut的奇怪结果,c++,opencv,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("i
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;
}
intmain()
{
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);
图像1.转换到(图像1,CV_32F,1.0/255.0);
//我们的弯角刚好在(0,0)
cv::角点1;
角1.x=0;
1.y=0;
cv::角点2;
角2.x=0;
角2.y=0;
向量角点;
拐角。向后推(拐角1);
拐角。向后推(拐角2);
std::矢量掩模;
//matimagesk0;
//Mat-imagesk1;
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);
掩模。推回(imageMask0);
掩模。推回(imageMask1);
std::矢量源;
源。推回(图像0);
来源。推回(图1);
cv::detail::GraphCutSeamFinder*seam_finder=新cv::detail::GraphCutSeamFinder();
seam_finder->find(源、角、遮罩);
cv::imshow(“面具”,面具[1]);
掩码[0]。转换为(掩码[0],CV_8UC3255);
cv::imwrite(“F:\\1\\998.jpg”,掩码[0]);
掩码[1]。转换为(掩码[1],CV_8UC3255);
cv::imwrite(“F:\\1\\999.jpg”,掩码[1]);
printf(“%lu\n”,masks.size());
//对于(int i=0;i //std::你没看到吗?谢谢你的回答,但是,我想用Opencv的GraphCut在重叠的图像之间找到接缝,这样我就可以缝合它们了!