在C中,给定包含数字的图像,如何将每个单独的数字提取到单独的图像中?

时间:2014-08-19 01:48:36

标签: c opencv image-processing sift

举个例子。假设图像包含黑色的数字1和2。背景是白色的。我想最终得到两个新文件,其中一个只包含数字1,另一个只包含数字2.我一直在使用OpenCv中的Sift,但作为一个完整的图像处理新手,我需要一些指导。任何帮助是极大的赞赏。

2 个答案:

答案 0 :(得分:1)

尝试进行连接组件分析。然后,您可以根据这些区域划分图像。 见here

答案 1 :(得分:0)

  1. 扫描图像。
  2. 当你找到一个黑色像素时,洪水填充白色, 导致带有其中一个字符的图像。
  3. 反转生成的图像 并将其添加到原始图像,从而生成带有的图像 其他角色。
  4. E.g。 (假设您只有2个数字,如您所指定的那样)

    void save_numbers(cv::Mat image) // Assume image type is CV_8UC1
    {
        for(int i = 0; i < image.rows; ++i)
        {
            uchar *row = image.ptr<uchar>(i);
    
            for(int j = 0; j < image.cols; ++j)
            {
                if(row[j] == 0)  // found a black pixel
                {
                    cv::Mat number1 = image.clone();
                    cv::floodFill(number1, cv::Point(j, i), 255);
                    cv::Mat number2 = 255 - number1 + image;
                    cv::imwrite("number1.png", number1);
                    cv::imwrite("number2.png", number2);
                    return;
                }
            }
        }
    }