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 然后 条件表达式就能理解了。
时间: 2024-10-13 12:38:10

cvThreshold的相关文章

OpenCV中对图像进行二值化的关键函数——cvThreshold()。

函数功能:采用Canny方法对图像进行边缘检测 函数原型: void cvThreshold( const CvArr* src, CvArr* dst, double threshold, double max_value, int threshold_type ); 函数说明: 第一个参数表示输入图像,必须为单通道灰度图. 第二个参数表示输出的边缘图像,为单通道黑白图. 第三个参数表示阈值 第四个参数表示最大值. 第五个参数表示运算方法. 在OpenCV的imgproc\types_c.h中

【练习5.12】cvThreshold、cvAdaptiveThreshold、各参数效果对比

提纲 题目要求 程序代码 结果图片 要言妙道 题目要求: 载入一副场景丰富的图像,使用cvThreshold()函数对其进行操作,设置阈值为128,. a.依次用表5-5中的设置类型并显示结果 b.用函数cvAdaptiveThreshold()设param1=5 c.先设param1=0,重复b,再设param1=-5,重复b 程序代码: 1 // OpenCVExerciseTesting.cpp : 定义控制台应用程序的入口点. 2 // 3 //D:\\Work\\Work_Progra

cvThreshold()函数理解

对图像二值化函数cvThreshold的理解 Threshold 对数组元素进行固定阈值操作 void cvThreshold( const CvArr* src, CvArr* dst, double threshold, double max_value, int threshold_type ); src 原始数组 (单通道 , 8-bit of 32-bit 浮点数). dst 输出数组,必须与 src 的类型一致,或者为 8-bit. threshold 阈值 max_value 使用

cvThreshold与cvAdaptiveThreshold 阀值化操作与自动阀值化操作

核心函数:cvThreshold,cvAdaptiveThreshold 程序: 代码: #include "cv.h" #include "cxcore.h" #include "highgui.h" #include <iostream> int AdaptiveThreshold(int argc,char** argv) { IplImage* src=cvLoadImage("e:\\picture\\4.jpg&

OpenCV二值化cvThreshold和自适应二值化cvAdaptiveThreshold及Otsu

阈值化函数: double cvThreshold(constCvArr* src, CvArr* dst, double threshold, double max_value,int threshold_type) 参数:   src –原始数组 (单通道 , 8-bit of 32-bit 浮点数). dst –输出数组,必须与 src 的类型一致,或者为 8-bit. thresh –阈值. max_value –使用 CV_THRESH_BINARY 和 CV_THRESH_BINAR

二值化函数cvThreshold()参数CV_THRESH_OTSU的疑惑【转】

查看OpenCV文档cvThreshold(),在二值化函数cvThreshold(const CvArr* src, CvArr* dst, double threshold, double max_value, int threshold_type)中,参数threshold_type有5种类型: THRESH_BINARY THRESH_BINARY_INV THRESH_TRUNC THRESH_TOZERO THRESH_TOZERO_INV 问题来了:为什么可以在threshold_

邹柞尊茁总兹OpenCV二值化cvThreshold和自适应二值化cvAdaptiveThreshold及Otsu

http://18qmz5e.cn.ec51.com/ http://j998gkg.cn.ec51.com/ http://y18hwzv.cn.ec51.com/ http://w36993p.cn.ec51.com/ http://rd812v5.cn.ec51.com/ http://x713145.cn.ec51.com/ http://6kj8767.cn.ec51.com/ http://3wg335r.cn.ec51.com/ http://sd5j1g5.cn.ec51.com

[转载+原创]Emgu CV on C# (四) —— Emgu CV on 二值化

重点介绍了二值化原理及数学实现,并利用emgucv方法编程实现. 一.理论概述(转载,如果懂图像处理,可以略过,仅用作科普,或者写文章凑字数)  1.概述 图像二值化是图像处理中的一项基本技术,也是很多图像处理技术的预处理过程. 图像的预处理在进行图像二值化操作前要对图像进行预处理,包括彩色图像灰化和增强.由于选取阈值需要参照直方图,因此在图像进行处理后,我们再获取图像的直方图以帮助选取阈值.整个流程如下所示: 读取图像→灰度图像→图像增强→图像直方图→二值化处理 2.数学原理(转载,基本可以不

opencv学习笔记

最近想学一下图像处理,于是乎就有了这个. 1[opencv2.4.10和vs2013配置] 在网上已经很多这种配置我直接贴上链接方便一下大家 http://jingyan.baidu.com/article/64d05a025a686bde54f73b54.html 这个很容易操作的. 2[一些常用函数] 用一个二值化程序来写一些常用函数. 命名可视窗口 const char *pstrWindowsSrcTitle = "原图"; const char *pstrWindowsToo