OpenCv从不同来源减去相同的图像

时间:2015-06-02 06:37:16

标签: image opencv computer-vision subtraction

我需要减去两张图片:

  1. img1是原始图片,充当对象Object Image (img1)
  2. 使用相机充当场景Scene Image (img2) 点击
  3. img2
  4. 结果图片:drive.google.com/open?id=0B0IUdCi6RzGcRENDSEdoa3dRN2c&authuser=0 (我不能添加两个以上的链接)
  5. 在调用减法方法之前,执行以下步骤:

    1. 对象图像(img1)位于使用findHomographyperspectiveTransform方法的场景图像(img2)中。

    2. 使用getPerspectiveTransformwarpPerspective方法

    3. 修复透视图

      然后调用subtract方法,但输出图像包含应该减去的线/轮廓。

      根据我的观察,这可能是由于一张图像中出现的噪点,它看起来并不像img1那样清晰,我试着在锐化之后调用减法但是它不起作用。

      任何建议/指导都是适当的

1 个答案:

答案 0 :(得分:1)

要删除不清晰度工件和略微不完美的对齐问题,您可以尝试扩展模板图像。但是你会丢失一些输入信息。

如果你想“更好”,我建议你尝试在输入图像中找到模板图像的每个轮廓(例如,使用活动轮廓)。剩下的一切都应该是用户输入。

但这里有扩张的简单版本:

输入:

输入掩码图片:

enter image description here

扩张后的模板蒙版图像:

enter image description here

差异图片:input - template

enter image description here

请注意,我不使用任何透视校正,这可能会或可能不会改善结果!

int main()
{
    // edited image:
    cv::Mat input = cv::imread("../inputData/earth-science-worksheet-edited.png");
    cv::Mat grayInput;
    cv::cvtColor(input,grayInput,CV_BGR2GRAY);
    cv::Mat maskInput = grayInput < 150; // find everything that isn't "white" on your sheet of paper


    // template image:
    cv::Mat templateImage = cv::imread("../inputData/earth-science-worksheet-printable.png");
    cv::Mat grayTemplate;
    cv::cvtColor(templateImage,grayTemplate,CV_BGR2GRAY);
    cv::Mat maskTemplate = grayTemplate < 150; // find everything that isn't "white" on your sheet of paper

    // dilate the template image to overcome sharpness effects and imperfect alignment
    cv::dilate(maskTemplate, maskTemplate, cv::Mat(), cv::Point(-1,-1),1);

    // compute the difference image
    cv::Mat difference = maskInput - maskTemplate;


    cv::imshow("input", input);

    cv::imshow("mask template", maskTemplate);
    cv::imshow("mask input", maskInput);

    cv::imshow("difference", difference);

    cv::waitKey(0);
    return 0;
}

如果更改为cv::dilate(maskTemplate, maskTemplate, cv::Mat(), cv::Point(-1,-1),2);,您会失去更多的“输入”,但您会移除其他噪点像素。

enter image description here