seam_finder->find(images_warped_f, corners, masks_warped);
imwrite("/Users/pengyuyan/Desktop/data/stitching_warp/mask/masks_warped_1.jpeg", masks_warped[0]);
imwrite("/Users/pengyuyan/Desktop/data/stitching_warp/mask/masks_warped_2.jpeg", masks_warped[1]);
imwrite("/Users/pengyuyan/Desktop/data/stitching_warp/mask/images_warped_f_1.jpeg", images_warped_f[0]);
imwrite("/Users/pengyuyan/Desktop/data/stitching_warp/mask/images_warped_f_2.jpeg", images_warped_f[1]);
// LOGLN("images_warped_f size, " << images_warped_f.size());
// LOGLN("masks_warped size, " << masks_warped.size());
//通过canny边缘检测,得到掩码边界,其中有一条边界就是接缝线
for(int k=0;k<2;k++)
Canny(masks_warped[k], masks_warped[k], 3, 9,3 );
vector<Mat> dilate_img(2);
Mat element = getStructuringElement(MORPH_RECT, Size(10, 10));
for(int k =0; k<num_images;k++) //遍历两幅图像
{
dilate(masks_warped[k], dilate_img[k],element); //膨胀运算
//在映射变换图上画出接缝线,在这里只是为了呈现出的一种效果,所以并没有区分接缝线和其他掩码边界
for(int y = 0; y < images_warped[k].rows; y++)
{
for(int x = 0; x < images_warped[k].cols; x++)
{
if(dilate_img[k].at<uchar>(y, x) == 255) //掩码边界
{
images_warped[k].getMat(ACCESS_READ).at<Vec3b>(y, x)[0] = 255;
images_warped[k].getMat(ACCESS_READ).at<Vec3b>(y, x)[1] = 0;
images_warped[k].getMat(ACCESS_READ).at<Vec3b>(y, x)[2] = 255;
}
}
}
}
imwrite("/Users/pengyuyan/Desktop/data/stitching_warp/seam/seam1.jpg", images_warped[0]); //存储图像
imwrite("/Users/pengyuyan/Desktop/data/stitching_warp/seam/seam2.jpg", images_warped[1]);
// Release unused memory
images.clear();
images_warped.clear();
images_warped_f.clear();
masks.clear();