举个例子。假设图像包含黑色的数字1和2。背景是白色的。我想最终得到两个新文件,其中一个只包含数字1,另一个只包含数字2.我一直在使用OpenCv中的Sift,但作为一个完整的图像处理新手,我需要一些指导。任何帮助是极大的赞赏。
答案 0 :(得分:1)
尝试进行连接组件分析。然后,您可以根据这些区域划分图像。 见here
答案 1 :(得分:0)
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;
}
}
}
}