前段时间研究了下印象笔记的扫描宝,发现它将手机拍下的照片都能处理成白板背景,而且处理的很干净,出于好奇并学习,自己琢磨出了个简易的去底色算法,虽然不能跟印象笔记的相比,但是效果也还阔以,供自己学习了,有兴趣的朋友欢迎指教。

文中测试图分别如下:

图1

图2

图3

图4

法一:伽马变换

主要思想:调整色阶,明暗图像求加;

void ls::gamma2Add(cv::Mat &src,cv::Mat &dst)
{Mat image;resize(src, image, Size(((float)src.cols/(float)src.rows)*krows,krows));Scan scan;cv::Mat dst1,dst2;scan.gammaCorrection(image, dst1, 0.45);scan.gammaCorrection(image, dst2, 2);    dst = dst1 + dst2;}

效果如下:

            

法二:替换背景的像素值;

主要思想,首先遍历图像(遍历可以优化),统计出图像中最多的颜色像素,然后替换成255;

void changeRGB(Mat &src){
//        Mat image;
//        detailEnhance(src, src);Mat gray;cvtColor(src, gray, CV_BGR2GRAY);MatND hist = getHistogram(gray);double maxVal = 0,minVal = 0;//获取最大值和最小值int hpt = static_cast<int>(0.9 * histSize[0]);minMaxLoc(hist, &minVal, &maxVal,0,0);cout<<minVal<<","<<maxVal<<endl;vector<int> kChange;
//        int th = me / maxVal;
//        int nonzero = countNonZero(gray);
//        double ratio = nonzero / (double)(gray.cols * gray.rows);
//        cout<<ratio<<endl;for (int i = 0; i < histSize[0]; i ++){float binVal = hist.at<float>(i);//cout<<binVal<<endl;int intensity = static_cast<int>(binVal*hpt/maxVal);if (abs(intensity - 255) < 60){intensity = 255;hist.at<float>(i) = intensity * maxVal/hpt;}
//            if (abs(intensity - 0) > 30) {
//                intensity = 0;
//                hist.at<float>(i) = intensity * maxVal/hpt;
//            }
//            }minMaxLoc(hist,&minVal, &maxVal,0,0);cout<<minVal<<","<<maxVal<<endl;for (int num = 0; num < histSize[0]; num ++){if (hist.at<float>(num) >= 0.5*maxVal)//( hist.at<float>(i) >= ratio*maxVal && hist.at<float>(i) <= 1.0*maxVal)//3.63{kChange.push_back(num);}}int nl = src.rows;int nc = src.cols;
//        if (src.isContinuous()) {
//            nc = nc * nl;
//            nl = 1;
//        }for (int j = 0; j < nl; j ++){
//            uchar *data = src.ptr<uchar>(j);for (int l = 0; l < nc; l ++){int b = 0.11 * src.at<Vec3b>(j, l)[0];int g = 0.59 * src.at<Vec3b>(j, l)[1];int r = 0.30 * src.at<Vec3b>(j, l)[2];int greyVal = b + g + r;for (int ii = 0; ii < kChange.size(); ii ++){if (abs(greyVal - kChange[ii]) <= 18)//
//                    if (greyVal == kChange[ii]){src.at<Vec3b>(j, l)[0] = 255;src.at<Vec3b>(j, l)[1] = 255;src.at<Vec3b>(j, l)[2] = 255;}}}}}

效果如下:

            

不难发现还是有一些瑕疵在的,希望能与大家交流讨论。。

关于印象笔记的扫描宝——简单的图像背景去除(去底色)算法小结相关推荐

  1. 基于单幅图像的快速去雾算法实现

    清华大学,刘倩,基于单幅图像的快速去雾算法(知网上可以找到2013年的文章). 此方法过程: matlab实现的算法: I=imread('tiananmen.jpg') figure imshow( ...

  2. 基于暗通道先验的单幅图像去雾算法小结

    在开始之前,先看一组去雾的效果图. 1. 关于去雾的意义及算法 去雾在视频监控.航拍.遥感.自动/辅助驾驶等需要在室外复杂.恶劣天气下运行的视觉系统,都可能需要运用到这一技术. 目前去雾算法主要有两个 ...

  3. Qt实现简单的单一背景去除

    最近在处理去除背景的需求,然后就用Qt简单的处理了一下,代码如下: QImage CDemoDialog::ConvertImage(QImage &image) {QImage maskIm ...

  4. 图像和视频的快速去雾算法研究

    王昕, 孙莹莹, 李影昉. 图像和视频的快速去雾算法研究[J]. 影像科学与光化学, 2016, 34(1): 82-87.   WANG Xin, SUN Yingying, LI Yingfang ...

  5. 综述:视频和图像去雾算法以及相关的图像恢复和增强研究

    综述:视频和图像去雾算法以及相关的图像恢复和增强研究 翻译自IEEE的一篇文章<Review of Video and Image Defogging Algorithms and Relate ...

  6. 基于MATLAB改进暗通道先验的图像去雾算法

    基于MATLAB改进暗通道先验的图像去雾算法 摘要:暗通道先验去雾算法求得的的透射率比较精细,去雾效果优于大多数去雾算法.然而在暗通道求取过程中,最小值滤波的处理会使得暗色向外扩张,导致透射率扩张变大 ...

  7. 去毛边 叶片图像_彩色叶片图像去尘算法

    彩色叶片图像去尘算法 杨 森 , 冯 全 * , 杨 梅 , 李妙祺 ( 甘肃农业大学工学院 兰州 730070) (1535361383@qq.com) 摘 要 : 针对户外降尘造成叶片图像中颜色失 ...

  8. VS+openCV 之操作像素(下)实现简单的图像运算、图像重映射

    一.实现简单的图像运算 [事前准备]准备两张大小一样的图片 [实现] cv::Mat image1;image1 = cv::imread("1.jpg");cv::Mat ima ...

  9. 第一个Android应用 扫描宝 欲挑战传统扫描枪

    前言 很久没有上博客园,更是很久没更新过随笔了.这个小小的Android应用还是去年年底开发的,过完年后一直都很忙,也比较懒,今天在整理资料的时候,觉得这个小小的应用算是学习Android开发的一个毕 ...

最新文章

  1. 访谈Brad Fitzpatrick——《编程人生》精彩样章,抢先看
  2. 再迎利好,“预共识”或能助力BCH“零确认”安全可靠
  3. swift_035(Swift之第三方库Kingfisher篇)
  4. python输入一组身高_一起学Python系列之用户输入
  5. linux tomcat apr安装,Linux下Tomcat8.0.44配置使用Apr的方法
  6. 解析并验证IE6及之前版本的'!important’ BUG(转)
  7. poj 1469 二分图最大匹配
  8. boost::hana::remove_range用法的测试程序
  9. 浅谈五大Python Web框架
  10. 2017.3.14-9.1 玩具取名 失败总结
  11. 网友的VOIP总结 1
  12. python二十四点_python实现24点游戏(地球上最短的24点游戏代码?)
  13. bat 下 字符串拆分 类似 split 可以使用 for /f delims
  14. 12 序列化器Serializer的使用
  15. 碧桂园+电子签章系统,打造印控中台,实现集团印章管控一体化
  16. 实战智能推荐系统(12)-- 标签推荐系统
  17. java简单的猜数字游戏
  18. 郭霖老师的组合模式讲解
  19. 数学建模-自来水管道铺设问题
  20. 人工智能 α-β剪枝

热门文章

  1. 导入带隐藏列的Excel发生错位
  2. 一个IT应届毕业生的求职总结
  3. 转 cvCvtColor的用法
  4. Tensorflow反卷积(DeConv)实现原理+手写python代码实现反卷积(DeConv)
  5. systemverilog define用法
  6. 聚星Note03 - 后台管理环境搭建(3)
  7. Web网页测试全流程解析论Web自动化测试
  8. 有点意思....有空常看看
  9. c语言和python区别
  10. Launch启动文件的使用方法