opencv - 为grabCut缩小图像
问题描述
我有一个输入图像(大约 24 MP)。在 OpenCV 中将这么大的图像输入到grabCut 非常耗时,所以首先我想缩小图像然后我想放大蒙版。因此,在grabCut函数中,我将图像缩小如下:
//Downsampling
double c_ratio = 0.0;
double r_ratio = 0.0;
double ratio = 0.0;
bool donwSampled = false;
if (img.cols > 800 || img.rows > 600){
c_ratio = img.cols/800.0;
r_ratio = img.rows/600.0;
ratio = (c_ratio > r_ratio)?r_ratio:c_ratio;
printf("downscaled by: %f\n", ratio);
fflush(stdout);
resize( img, img, Size( img.cols/ratio, img.rows/ratio ),0,0,INTER_LANCZOS4);
resize( mask, mask, Size( mask.cols/ratio, mask.rows/ratio ),0,0,INTER_LANCZOS4);
donwSampled = true;
}
这个函数的结尾我升级如下:
//Upsampling
if(donwSampled){
resize( img, img, Size( img.cols*ratio, img.rows*ratio ));
resize( mask, mask, Size( mask.cols*ratio, mask.rows*ratio ));
}
输入掩码如下:
输出是这样的:
正如在输出图像中看到的那样,画笔周围的小区域在前景和背景选择中都被标记为错误。
解决方案
推荐阅读
- continuous-integration - Bitbucket PR 评论可以触发 CI/CD 操作吗?
- python-3.x - 如何获得嵌套的scrapy - 选择器
- c - C中的while循环迭代问题
- javascript - Javascript 移位数组的值
- terraform - 当未指定值时,是否可以忽略 terraform 模块中的可选字段?
- javascript - Highcharts专栏如何将系列名称移动到具有较大文本大小的标题位置
- c++ - 去除黑色背景表单纹理OpenGL
- javascript - CORS 策略阻止了对获取“url”的访问:请求的资源上不存在“Access-Control-Allow-Origin”标头。反应JS
- jquery - DataTables 和 Moment - 如何添加持续时间以获得总时间
- python - 由于 EnvironmentError 无法下载 tensorflow