专栏首页ROBOTEDU【CV学习2.0】 OpenCV中的二值化方法

【CV学习2.0】 OpenCV中的二值化方法

导览

OpenCV中的二值化方法

  1. CV::threshold(..,thr,...)
  2. CV::threshold(...,Thr_OTSU,...)
  3. CV::adativethreshold()

01

threshold(..,thr,...)和threshold(...,Thr_OTSU,...)

自定义阈值

采用低/高 通滤波的方法

double threshold
( 
InputArray src,  //输入
OutputArray dst,//输出
double thresh, //自定义阈值
double maxval, //二值化的最大值
int type //二值化类型,有五种类型具体见手册
);

如果把自定义阈值设置为 CV::THRESH_OTSU,则这个方法会自动计算一个阈值

注:thresshold()可以看做对图像数组做的一个1x1的核的卷积

02

CV::adativethreshold()

adativethreshold()在卷积过程中自动计算每个核的阈值

void adaptiveThreshold
( 
InputArray src, //输入
OutputArray dst,//输出
double maxValue,//二值化最大值
int adaptiveMethod,//加权方法0:均值 1:高斯
int thresholdType,//阈值类型
int blockSize,//核大小
double C//常数C
 );

注1:adativethreshold()自适应阈值是一个利用blocksize参数设置大小的核的卷积方法

注2:blocksize必须为奇数,保证核唯一

注3:加权方法为均值,0:核内所有数据均值加权,1:核内数据加权是以到锚点的高斯距离来加权

15*15核,不同常数C对比

C=10,不同核大小对比

02

工程代码

int main(int argc, char**argv)    {
  cv::VideoCapture cap;
  cv::namedWindow("camrea_video", CV_WINDOW_AUTOSIZE);
  int pos=15;
  int*a = &pos;
  cv::createTrackbar("scroller", "camrea_video",a, 30);
  cap.open(1);
  cv::Mat frame;
  cv::Mat frame1;
  for (;;)
  {
    cap >> frame;
    //cv::threshold(frame, frame,cv::THRESH_OTSU, 255, cv::THRESH_TOZERO);
    cv::cvtColor(frame, frame1, cv::COLOR_BGR2GRAY);
    if (*a%2==0)
    {
      *a=*a+1;
    }
    cv::adaptiveThreshold(frame1, frame1, 255, cv::ADAPTIVE_THRESH_GAUSSIAN_C, cv::THRESH_BINARY, *a, 10);
    if (frame.empty())
    {
      break;
    }
    //cv::putText(frame,ToString(cap.get(cv::CAP_PROP_POS_MSEC)), cv::Point(100, 100),cv::FONT_HERSHEY_SIMPLEX,1,cv::Scalar(0,0,255));
    cv::imshow("camrea_video", frame1);
    if (cv::waitKey(100) >= 0)
    {
      break;
    }
  }
  return 0;
}

小结

OpenCV中的二值化方法

CV::threshold(..,thr,...)

CV::threshold(...,Thr_OTSU,...)

CV::adativethreshold()

本文分享自微信公众号 - ROBOTEDU(RobotEDU_China),作者:EdenChen

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-04-14

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 【答疑】带参数的例行程序运用

    EdenChen
  • 【赛题分析】分拣与排序(上)

    中职技能大赛 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

    EdenChen
  • 【点云学习】软件制作2 点云转2D

    常用的一种颜色格式,RGB分别代表红,绿和蓝。RGB值的变化代表了颜色的变化。

    EdenChen
  • 二值分析 | OpenCV + skimage如何提取中心线

    显然OpenCV中常见的轮廓分析无法获得上面的中心红色线段,本质上这个问题是如何提取二值对象的骨架,提取骨架的方法在OpenCV的扩展模块中,另外skimage...

    OpenCV学堂
  • 【python-opencv】形态转换

    形态变换是一些基于图像形状的简单操作。通常在二进制图像上执行。它需要两个输入,一个是我们的原始图像,第二个是决定操作性质的结构元素或内核。两种基本的形态学算子是...

    绝命生
  • 机器视觉算法(第10期)----图像处理中64个常用的算子

    上期我们一起学习了OpenCV中最重要的数据类型数组Mat类, 机器视觉算法(第9期)----OpenCV中最最最重要的类型 从今天我们仍将以OpenCV为工具...

    智能算法
  • C++ OpenCV视频操作之图像输出文字

    当我们视频分析时可能图像中需要有一个文字说明,OpenCV中本身也有这个API,我们就来看看OpenCV中的图像文字输出。

    Vaccae
  • OpenCV系列之轮廓特征 | 二十二

    特征矩可以帮助您计算一些特征,例如物体的质心,物体的面积等。请查看特征矩上的维基百科页面。函数cv.moments()提供了所有计算出的矩值的字典。见下文:

    磐创AI
  • 【python opencv】模板匹配

    在本章中,您将学习 - 使用模板匹配在图像中查找对象 - 你将看到以下功能:cv.matchTemplate(),cv.minMaxLoc()

    绝命生
  • Python-OpenCV 处理图像(二):滤镜和图像运算

    喜欢自拍的人肯定都知道滤镜了,下面代码尝试使用一些简单的滤镜,包括图片的平滑处理、灰度化、二值化等:

    bear_fish

扫码关注云+社区

领取腾讯云代金券