opencv 学习之 阈值化<1> 单一阈值
来源:互联网 发布:错生网络剧百度云资源 编辑:程序博客网 时间:2024/05/16 17:06
先介绍几个函数。
1、图像融合
void cvAddWeighted( const CvArr* src1, double alpha,const CvArr* src2, double beta,double gamma, CvArr* dst );
src1 :第一个原数组.
alpha :第一个数组元素的权值
src2 :第二个原数组
beta :第二个数组元素的权值
dst :输出数组
gamma :添加的常数项
函数 cvAddWeighted 计算两数组的加权值的和:
dst(I)=src1(I)*alpha+src2(I)*beta+gamma
所有的数组必须的相同的类型相同的大小(或ROI大小)
2、阈值操作
void cvThreshold( const CvArr* src, CvArr* dst, double threshold, double max_value, int threshold_type );
threshold_type:阈值类型
threshold_type=CV_THRESH_BINARY:
如果 src(x,y)>threshold ,dst(x,y) = max_value; 否则,dst(x,y)=0;
threshold_type=CV_THRESH_BINARY_INV:
如果 src(x,y)>threshold,dst(x,y) = 0; 否则,dst(x,y) = max_value.
threshold_type=CV_THRESH_TRUNC:
如果 src(x,y)>threshold,dst(x,y) = threshold; 否则dst(x,y) = src(x,y).
threshold_type=CV_THRESH_TOZERO:
如果src(x,y)>threshold,dst(x,y) = src(x,y) ; 否则 dst(x,y) = 0。
如果src(x,y)>threshold,dst(x,y) = src(x,y) ; 否则 dst(x,y) = 0。
threshold_type=CV_THRESH_TOZERO_INV:
如果 src(x,y)>threshold,dst(x,y) = 0 ; 否则dst(x,y) = src(x,y).
如果 src(x,y)>threshold,dst(x,y) = 0 ; 否则dst(x,y) = src(x,y).
//阈值化#include "highgui.h"#include "cv.h"void Threshold(IplImage * src, IplImage * dst){IplImage * r = cvCreateImage(cvGetSize(src), IPL_DEPTH_8U, 1);IplImage * g = cvCreateImage(cvGetSize(src), IPL_DEPTH_8U, 1);IplImage * b = cvCreateImage(cvGetSize(src), IPL_DEPTH_8U, 1);//分别复制多通道图像的每个通道到多个单通道图像cvSplit(src, r, g, b, NULL);IplImage * s = cvCreateImage(cvGetSize(src), IPL_DEPTH_8U, 1);//图像融合,src1,权值,src2,权值,常数项,dstcvAddWeighted(r, 1./3., g, 1./3., 0.0, s);cvAddWeighted(s, 2./3., b, 1./3., 0.0, s);//s>100, dst=100, s<100,dst=scvThreshold(s, dst, 100, 100, CV_THRESH_TRUNC);cvReleaseImage(&r);cvReleaseImage(&g);cvReleaseImage(&b);cvReleaseImage(&s);}int main(){IplImage * src = cvLoadImage("d:\\picture\\01.bmp");IplImage * dst = cvCreateImage(cvGetSize(src), src->depth, 1);cvNamedWindow("src", 0);cvNamedWindow("dst", 0);Threshold(src, dst);cvShowImage("src", src);cvShowImage("dst", dst);if(cvWaitKey(0)==27){cvDestroyWindow("src");cvDestroyWindow("dst");cvReleaseImage(&src);cvReleaseImage(&dst);}}
效果如图:
另一种阈值化方法:
// Threshold.cpp<pre name="code" class="html">
<span style="font-family: Arial, Helvetica, sans-serif;">IplImage * s = cvCreateImage(cvGetSize(src), IPL_DEPTH_32F, 1);</span>cvZero(s);cvAcc(b,s);cvAcc(g,s);cvAcc(b,s);cvAcc(r,s);cvThreshold(s, dst, 100, 100, CV_THRESH_TRUNC);
效果如下:
void cvAcc( const CvArr* image, CvArr* sum, const CvArr* mask=NULL );
image
输入图像, 1- 或 3-通道, 8-比特或32-比特浮点数. (多通道的每一个通道都单独处理).
sum
同一个输入图像通道的累积,32-比特或64-比特浮点数组
mask
可选的运算 mask.
函数 cvAcc 将整个图像 image 或某个选择区域叠加到 sum 中:
0 0
- opencv 学习之 阈值化<1> 单一阈值
- OpenCV学习之阈值化
- OpenCV学习之阈值化
- opencv 学习之 阈值化<2> 自适应阈值
- 学习OpenCV---阈值化
- 初学opencv-单一阈值与自适应阈值
- opencv学习之图像阈值化
- Opencv学习之阈值化处理
- OpenCV学习笔记-阈值化
- OpenCV学习笔记-阈值化
- OpenCV学习笔记-自适应阈值化
- OpenCV学习笔记-自适应阈值化
- Opencv学习笔记-----图像阈值化处理
- 【OpenCV学习笔记】十六、图像阈值化
- OpenCV学习笔记-自适应阈值化
- Opencv学习——图像阈值化
- OpenCV阈值化
- opencv-阈值化处理
- Linux下编译VLC for Android源代码总结
- UI线程和异步任务AsyncTask
- Sending data to Auditconsole via mlogc
- 蓝桥杯:分糖果
- opencv 鼠标响应函数
- opencv 学习之 阈值化<1> 单一阈值
- 小结:POI写Excel公式(函数)及从Excel中读取公式计算值
- activiti5第一弹-----基本的activiti示例
- [学习小结]Mybaits的解决字段名与实体类属性名不相同的冲突
- 文字加解密 自制桌面图标 IP地址查询 等工具
- 局部敏感hash
- CSDN网站系统升级公告
- Jax-Ws 在MyEclipse 上的开发入门
- 限制UITextField输入的内容