【练习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_Programming\\Source\\Image\\lena.jpg
  4
  5
  6 #include "stdafx.h"
  7 #include <cv.h>
  8 #include <highgui.h>
  9 #include <iostream>
 10
 11 #include <opencv2/legacy/legacy.hpp>
 12 //#pragma comment(lib, "opencv_legacy2411.lib")
 13
 14 using namespace cv;
 15 using namespace std;
 16
 17 //函数声明-->--->-->--->-->--->-->--->//
 18
 19
 20 //<--<--<--<--<--<--<--<--<--函数声明//
 21
 22 int _tmain(int argc, _TCHAR* argv[])
 23 {
 24     const char * soutceFile = "D:\\Work\\Work_Programming\\Source\\Image\\OpenCVExerciseImage\\第5章\\山水风景.jpg";
 25     IplImage * image_Resource = cvLoadImage(soutceFile, CV_LOAD_IMAGE_UNCHANGED);
 26     assert(image_Resource);
 27
 28     cvNamedWindow("原始图像", 0);
 29     cvNamedWindow("题目_a_1", 0);
 30     cvNamedWindow("题目_a_2", 0);
 31     cvNamedWindow("题目_a_3", 0);
 32     cvNamedWindow("题目_a_4", 0);
 33     cvNamedWindow("题目_a_5", 0);
 34     cvNamedWindow("题目_b_1", 0);
 35     cvNamedWindow("题目_b_2", 0);
 36     cvNamedWindow("题目_c_1", 0);
 37     cvNamedWindow("题目_c_2", 0);
 38     cvNamedWindow("题目_c_3", 0);
 39     cvNamedWindow("题目_c_4", 0);
 40
 41     IplImage * image_Gray = cvCreateImage(cvSize(image_Resource->width, image_Resource->height), IPL_DEPTH_8U, 1);
 42
 43     //使用cvCvtColor和cvCopy这些函数前,都应该对参数进行验证再使用
 44     if (image_Resource->nChannels != 3)
 45     {
 46         cout << "加载的图像必须为彩色图片" << endl;
 47         return 0;
 48     }
 49
 50     cvCvtColor(image_Resource, image_Gray, CV_RGB2GRAY);
 51
 52     cvShowImage("原始图像", image_Gray);
 53
 54     //---------------------------a:开始--------------------------------//
 55
 56     double max_value = 255;
 57     double threshold = 128;
 58
 59     IplImage * image_Result_a_1 = cvCloneImage(image_Gray);
 60     cvZero(image_Result_a_1);
 61     cvThreshold(image_Gray, image_Result_a_1, threshold, max_value, CV_THRESH_BINARY);
 62     cvShowImage("题目_a_1", image_Result_a_1);
 63
 64
 65     IplImage * image_Result_a_2 = cvCloneImage(image_Gray);
 66     cvZero(image_Result_a_2);
 67     cvThreshold(image_Gray, image_Result_a_2, threshold, max_value, CV_THRESH_BINARY_INV);
 68     cvShowImage("题目_a_2", image_Result_a_2);
 69
 70
 71     IplImage * image_Result_a_3 = cvCloneImage(image_Gray);
 72     cvZero(image_Result_a_3);
 73     cvThreshold(image_Gray, image_Result_a_3, threshold, max_value, CV_THRESH_TRUNC);
 74     cvShowImage("题目_a_3", image_Result_a_3);
 75
 76     IplImage * image_Result_a_4 = cvCloneImage(image_Gray);
 77     cvZero(image_Result_a_4);
 78     cvThreshold(image_Gray, image_Result_a_4, threshold, max_value, CV_THRESH_TOZERO_INV);
 79     cvShowImage("题目_a_4", image_Result_a_4);
 80
 81     IplImage * image_Result_a_5 = cvCloneImage(image_Gray);
 82     cvZero(image_Result_a_5);
 83     cvThreshold(image_Gray, image_Result_a_5, threshold, max_value, CV_THRESH_TOZERO);
 84     cvShowImage("题目_a_5", image_Result_a_5);
 85     //---------------------------a:结束--------------------------------//
 86
 87     //---------------------------b:开始--------------------------------//
 88
 89     IplImage * image_Result_b_1 = cvCloneImage(image_Gray);
 90     cvZero(image_Result_b_1);
 91     cvAdaptiveThreshold(image_Gray, image_Result_b_1, max_value, CV_ADAPTIVE_THRESH_MEAN_C, CV_THRESH_BINARY, 3, 5);
 92
 93     cvShowImage("题目_b_1", image_Result_b_1);
 94
 95
 96     IplImage * image_Result_b_2 = cvCloneImage(image_Gray);
 97     cvZero(image_Result_b_2);
 98     cvAdaptiveThreshold(image_Gray, image_Result_b_2, max_value, CV_ADAPTIVE_THRESH_MEAN_C, CV_THRESH_BINARY_INV,3,5);
 99
100     cvShowImage("题目_b_2", image_Result_b_2);
101
102     //---------------------------b:结束--------------------------------//
103
104     //---------------------------c:开始--------------------------------//
105
106     IplImage * image_Result_c_1 = cvCloneImage(image_Gray);
107     cvZero(image_Result_c_1);
108     cvAdaptiveThreshold(image_Gray, image_Result_c_1, max_value, CV_ADAPTIVE_THRESH_MEAN_C, CV_THRESH_BINARY, 3, 0);
109
110     cvShowImage("题目_c_1", image_Result_c_1);
111
112
113     IplImage * image_Result_c_2 = cvCloneImage(image_Gray);
114     cvZero(image_Result_c_2);
115     cvAdaptiveThreshold(image_Gray, image_Result_c_2, max_value, CV_ADAPTIVE_THRESH_MEAN_C, CV_THRESH_BINARY_INV, 3, 0);
116
117     cvShowImage("题目_c_2", image_Result_c_2);
118
119     IplImage * image_Result_c_3 = cvCloneImage(image_Gray);
120     cvZero(image_Result_c_3);
121     cvAdaptiveThreshold(image_Gray, image_Result_c_3, max_value, CV_ADAPTIVE_THRESH_MEAN_C, CV_THRESH_BINARY, 3, -5);
122
123     cvShowImage("题目_c_3", image_Result_c_3);
124
125
126     IplImage * image_Result_c_4 = cvCloneImage(image_Gray);
127     cvZero(image_Result_c_4);
128     cvAdaptiveThreshold(image_Gray, image_Result_c_4, max_value, CV_ADAPTIVE_THRESH_MEAN_C, CV_THRESH_BINARY_INV, 3, -5);
129
130     cvShowImage("题目_c_4", image_Result_c_4);
131
132     //---------------------------c:结束--------------------------------//
133
134     cvWaitKey(0);
135
136     cvReleaseImage(&image_Resource);
137     cvReleaseImage(&image_Result_a_1);
138     cvReleaseImage(&image_Result_a_2);
139     cvReleaseImage(&image_Result_a_3);
140     cvReleaseImage(&image_Result_a_4);
141     cvReleaseImage(&image_Result_a_5);
142     cvReleaseImage(&image_Result_b_1);
143     cvReleaseImage(&image_Result_b_2);
144     cvReleaseImage(&image_Result_c_1);
145     cvReleaseImage(&image_Result_c_2);
146     cvReleaseImage(&image_Result_c_3);
147     cvReleaseImage(&image_Result_c_4);
148
149     cvDestroyWindow("原始图像");
150     cvDestroyWindow("题目_a_1");
151     cvDestroyWindow("题目_a_2");
152     cvDestroyWindow("题目_a_3");
153     cvDestroyWindow("题目_a_4");
154     cvDestroyWindow("题目_a_5");
155     cvDestroyWindow("题目_b_1");
156     cvDestroyWindow("题目_b_2");
157     cvDestroyWindow("题目_c_1");
158     cvDestroyWindow("题目_c_2");
159     cvDestroyWindow("题目_c_3");
160     cvDestroyWindow("题目_c_4");
161
162     return 0;
163 }
164    

结果图片:

要言妙道:

①针对有很强照明或反射梯度的图像,需要根据梯度进行阈值化,自适应阈值技术非常有用,最有对比性的是《学习OpenCV》第161页使用cvThreshold和cvAdaptiveThreshold对图片处理的例子,当棋盘标定板有很强的照明梯度的时候,使用cvThreshold得不到完整的棋盘,但cvAdaptiveThreshold可以。

②cvAdaptiveThreshold的参数thresholdType ,官方文档的说明是 Thresholding type that must be either THRESH_BINARY or THRESH_BINARY_INV .,并不是cvThreshold的5种类型都能用

③CV_THRESH_TRUNC,对应的操作时dsti=(srci>T)?T:srci,其中T代表阈值,这点《学习OpenCV》中笔误

时间: 2024-08-20 02:51:25

【练习5.12】cvThreshold、cvAdaptiveThreshold、各参数效果对比的相关文章

二值化函数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_

精选12个时尚的 CSS3 效果【附源码下载】

精选12个时尚的 CSS3 效果[附源码下载] 这里是精选的12个很炫的 CSS3 效果.CSS3 是对 CSS 规范的一个很大的改善和增强,它使得 Web 开发人员可以很容易的在网站中加入时尚的效果.以前很多需要编写复杂的 JavaScript 代码才能实现的效果,如今只需要简单的写几句 CSS3 代码就能实现. 超炫的 CSS3 页面切换动画效果 今天我们想与大家分享一组创意的页面切换熊效果集合.我们已经在示例中罗列了一组动画,可以被应用到页面切换过程中,创造出很有趣的导航效果. 源码下载 

二阶和三阶隐马尔柯夫过程(HMM)进行中文分词的效果对比

第一部分 引言 关于隐马尔柯夫模型的详细内容在此就不详细介绍了,介绍HMM模型的文章很多,请读者自行去学习.二阶隐马尔柯夫模型解决问题有两个假设:其一是当前的状态仅与它前面相邻的状态有关:其二是状态转换和从某个状态发射某个观察符号的概率与时间t无关(即不动性假设).HMM是在这两个假设的前提下解决各种各样的问题的. 对于第二个假设,我们不去讨论它.现在来看第一个假设,二阶马尔柯夫过程假设当前状态仅与前面相邻的一个状态有关,那么对于分词来说,有些词可能会满足这样的情况,但也有可能会有些词并不这么简

(linux服务器)apache开启gzip的配置以及效果对比

配置: 1 进入配置目录: cd /opt/lampp/etc 2 编辑配置文件: vi httpd.conf 3 配置:增加以下代码片段 # gzip压缩 <IfModule mod_deflate.c> # 压缩等级 9 DeflateCompressionLevel 9 # 压缩类型 html.xml.php.css.js AddOutputFilterByType DEFLATE text/html text/plain text/xml application/x-javascrip

Type-c转HDMI方案设计与应用AG9310与AG9311产品性能与参数的对比

AG9310和AG9311都是用来设计TYPE-C转HDMI等音视频转换器方面的产品.具体的详细应用接口如下:首先我们介绍一下这两款AG9310和AG9311产品性能如下: AG9310的性能AG9310是一款实现USB Type-C 转HDMI数据转换器.支持USB Type-C 显示端口替代模式,AG9310可以将视频和音频流从USB Type-C 接口传输到HDMI端口.在AG9310中,支持1路.2路@1.62Gbps.2.7Gbps和5.4Gbps频率输入的不同配置,HDMI支持4K2

【练习5.】高斯平滑_调整调整4个参数的处理效果对比

题目要求: a.设置param1=param2=9,依次将param3设为1和6对比 b.设置param1=param2=0,依次将param3设为1和6对比 c.设置param1=param2=0,但这时令param3=1,param4=9,处理并显示结果 d.令param3=9,param4=1,重复操作c e.将图像使用c平滑一次,再使用d平滑一次,显示结果 f.对图像依次进行两次平滑操作,第一次参数为param1=param2=0,param3=param4=9,第二次参数为param1

四轴飞行器1.6 emwin与ucgui的移植,汉字外挂字库移植和DEMO效果对比

飞控的遥控器打算自己做,这样全局都能掌握,可以通过遥控器对飞控的参数和飞行模式进行修改,而买遥控器是做不到这样的哈..以后做图传的时候,屏幕还可以实时现实摄像头拍回来的画面,挺好的哈.. 做遥控我们选的是原子的战舰开发板,开发板附带小霸王那种遥控器,可以用这个来控制飞控哈,回忆童年有木有...板子还带一个ADXL345的加速度传感器,那还可以用开发板的姿态控制飞控的姿态..哈..应该挺好玩... 第一步我们打算先写一个GUI的界面,UI这东西就让我头疼哈.额..打算第一版就没什么UI,就把要显示

11大Java开源中文分词器的使用方法和分词效果对比

本文的目标有两个: 1.学会使用11大Java开源中文分词器 2.对比分析11大Java开源中文分词器的分词效果 本文给出了11大Java开源中文分词的使用方法以及分词结果对比代码,至于效果哪个好,那要用的人结合自己的应用场景自己来判断. 11大Java开源中文分词器,不同的分词器有不同的用法,定义的接口也不一样,我们先定义一个统一的接口: /** * 获取文本的所有分词结果, 对比不同分词器结果 * @author 杨尚川 */ public interface WordSegmenter {

9大Java开源中文分词器的使用方法和分词效果对比

本文的目标有两个: 1.学会使用9大Java开源中文分词器 2.对比分析9大Java开源中文分词器的分词效果 9大Java开源中文分词器,不同的分词器有不同的用法,定义的接口也不一样,我们先定义一个统一的接口: /**  * 获取文本的所有分词结果, 对比不同分词器结果  * @author 杨尚川  */ public interface WordSegmenter {     /**      * 获取文本的所有分词结果      * @param text 文本      * @retur