zoukankan      html  css  js  c++  java
  • cvThreshold

    看了很多很坑的文章。

    呵呵哒。而且基本上都是一个地方转载的,英文翻译我用你单独给一个词条么?就不能负点儿责?

    cvThreshold(img4, img3, 0, 128, CV_THRESH_OTSU);

    过于这个函数搜索的结果,真的是哪哪儿都是同样的描述,而且根本不是给人写的。

    下面是亲测的实验结果。

    /* Applies fixed-level threshold to grayscale image.把固定阈值应用到灰度图上

       This is a basic operation applied before retrieving contours

    在检索轮廓前这是一个基本操作。

    第一个参数表示灰度图中可以被判定为白色的最低标准,如果灰度图中的数值大于threshold那么就可以被认定为白色。

    max_value决定越过阈值的点的亮度,或者说是从0-255中间挑一个亮度进行显示。如果是255就是白的。如果是0就是黑的,中间表示不同程度的灰

    threshold_type

    0是亮度过线的按照max_value进行显示

    1是亮度没过线的按找到max_value显示

    2是 值大于阈值的话,是阈值,也就是不能最亮按照阈值显示

    3 值大于阈值的话是值,否则是0,也就是限了能通过的最低限,你有多亮,就显示多亮,就像成绩一样,可以不合格,不合格就悲剧,但是成绩合格的话,有多高算多高。不限高分

    4高分按0显示,低分有多低显示多低。

    7 那个参数不是给这个设计的,进去会报错

    CV_THRESH_OTSU  8 进去的话,通过 Otsu 算法自行选择阈值,此时对于threshold的设定不在起作用。

       */

    CVAPI(double)  cvThreshold( const CvArr*  src, CvArr*  dst,

                                double  threshold, double  max_value,

                                int threshold_type );

    #include <cv.h>
    #include <opencv2/core/core.hpp>  
    #include <opencv2/highgui/highgui.hpp>  
    #include <iostream>//这句代码出现在第一行会报错,你信不信!!!
    
    using namespace cv;
    using namespace std;
    
    int main()
    {
        // 读入一张图片(游戏原画)  
        //Mat img = imread("1.png",1);
        //Mat img2 = cvCreateMat(img.rows, img.cols, CV_8UC1);
    
        //IplImage * img = cvLoadImage("1.png");
        IplImage *img = cvLoadImage("lena.jpg");
        IplImage * img2 = cvCreateImage(cvSize(img->width,img->height), 8, 1);//
        IplImage * img3 = cvCreateImage(cvSize(img->width, img->height), 8, 1);//
        IplImage * img4 = cvCreateImage(cvSize(img->width, img->height), 8, 1); 
    
        cvCvtColor(img, img2, CV_BGR2GRAY);//要亮一些
        cvCvtColor(img, img4, CV_RGB2GRAY);
        cvThreshold(img4, img3, 0, 128, CV_THRESH_OTSU);
        cvShowImage("s", img);
        cvShowImage("s2", img2);
        cvShowImage("s3", img3);
        //1.png 165646 
        //1.jpg 9437184
        // 创建一个名为 "游戏原画"窗口  
        //cout << img->depth << endl;
        //cout << img.elemSize() << endl;
        //cout << img.size().width << endl;
        //cout << img.cols << endl;
        //cout << img.depth() << endl;
    
        waitKey(0);
    
    }
    cvThreshold(img4, img3, 0, 128, CV_THRESH_OTSU);
    为了自己能够跑起来这样一个函数建议输入的数值顺序是:
    100 128 0
    然后只更改第一个参数50、150 200
    然后基本了解第一个所谓阈值的参数
    然后更改第二个参数
    50 255
    了解第二个参数max_value
    第三个是类型。
    这个先试0然后试1 然后 条件表达式就能理解了。

  • 相关阅读:
    通过PowerShell发送TCP请求
    移动端h5全屏body背景图底部未到底bug
    前端开发工具——utils
    微信公众号网页开发——授权登录,js安全域名,jssdk使用
    移动端开发——移动端遮罩层滚动防穿透body解决方案
    js实现cookie有效期至当次日凌晨
    js获取数组中任意一项
    mysql连接错误,error1251解决方式
    Vue packages version mismatch
    js实现拖动效果
  • 原文地址:https://www.cnblogs.com/letben/p/5459571.html
Copyright © 2011-2022 走看看