opencv学习——彩色图转 灰度图和二值化
2012-12-17 17:03
211 查看
学习opencv当然从最简单的彩色图转灰度图以及二值化开始。在这里,我们需要注意的一个地方是在对灰度图进行二值化处理(阈值用滚动条)。
首先我们完成第一部分:读取一张彩色图片,转换成灰度图并保存
代码如下,还是比较容易懂得
显示效果如下:
第二部分:对灰度图进行二值化处理(阈值用滚动条)。在没有学opencv之前,可能你会想到用MFC实现滚动条,但是怎么说还是有点麻烦,查找opencv
资料后发现其实我们只要调用其中的函数就可以了,非常方便,也由此可见opencv的强大之处。
最后显示如下:
如果我们移动滚动条,图像就会随之变化
ok,今天的opencv学习还是挺满意的,接下来要再接再厉啦~~
首先我们完成第一部分:读取一张彩色图片,转换成灰度图并保存
代码如下,还是比较容易懂得
// test.cpp : 定义控制台应用程序的入口点。 #include "stdafx.h" #include "Windows.h" #include <iostream> #include "cv.h"//opencv的库,同下 #include "highgui.h" using namespace std; int main(int argc, char* argv[]) { IplImage *image;//初始化保存彩色图 IplImage *result;//初始化保存灰度图 image=cvLoadImage("D:\\test.jpg",-1);//从本地读取彩色图 //注意指针变量一定要先初始化才能使用,否则崩溃 //灰度转换时通道一定要设置正确 int channel=1;//image->nChannels; int depth=image->depth; CvSize sz; sz.width=image->width;//宽度 sz.height=image->height;//高度 result=cvCreateImage(sz,depth,channel);//生成image cvCvtColor(image,result,CV_BGR2GRAY);//转换成灰度图 cvNamedWindow("original",1);//窗口名称 cvShowImage("original",image);//显示彩色图 cvNamedWindow("gray",1); cvShowImage("gray",result);//显示转换后的灰度图 cvSaveImage("D:\\saveImage.jpg",result);//将灰度图保存到本地 cvWaitKey(0); cvReleaseImage(&image);//释放 cvReleaseImage(&result); cvDestroyWindow("original");//销毁 cvDestroyWindow("gray"); return 0; }
显示效果如下:
第二部分:对灰度图进行二值化处理(阈值用滚动条)。在没有学opencv之前,可能你会想到用MFC实现滚动条,但是怎么说还是有点麻烦,查找opencv
资料后发现其实我们只要调用其中的函数就可以了,非常方便,也由此可见opencv的强大之处。
#include "stdafx.h" #include <stdio.h> #include <stdlib.h> #include <math.h> #include "cv.h" #include "highgui.h" //全局变量 IplImage* pSrcImg=NULL; IplImage* pDecImg =NULL; //定义滑块事件函数,供调用 void onTrackerSlid(int thresh) { int i,j,k; int height = pDecImg->height; int width = pDecImg->width; int step = pDecImg->widthStep; int Channels = pDecImg->nChannels; uchar *data0 = (uchar *) pSrcImg->imageData; uchar *data1 = (uchar *) pDecImg->imageData; //对图像元素访问 for(i=0;i<height;i++) for(j=0;j<width;j++) for(k=0;k<Channels;k++) { if(data0[i*step+j+k]>thresh) data1[i*step+j+k] = 255; else data1[i*step+j+k] = 0; } cvShowImage( "pDecImg_Image",pDecImg); } int main( int argc, char** argv ) { int Thresh=10; pSrcImg=cvLoadImage("D:\\saveImage.jpg",-1);//从本地读取前一部分实验生成的灰度图 pDecImg = cvCreateImage(cvGetSize(pSrcImg),8,1); //1通道 pDecImg = cvCloneImage( pSrcImg); cvNamedWindow( "Source_Image", CV_WINDOW_AUTOSIZE); cvNamedWindow("pDecImg_Image",CV_WINDOW_AUTOSIZE); cvShowImage( "Source_Image", pSrcImg ); //创建滚动条 cvCreateTrackbar("threshold","pDecImg_Image",0,255,onTrackerSlid); onTrackerSlid(Thresh); cvSaveImage("D:\\erzhihua.jpg", pDecImg);//将二值化后的图保存到本地 cvWaitKey(0); //销毁窗口 cvDestroyWindow( "Source_Image" ); cvDestroyWindow( "pDecImg_Image" ); //释放图像 cvReleaseImage( &pSrcImg ); cvReleaseImage( &pDecImg); return -1; }
最后显示如下:
如果我们移动滚动条,图像就会随之变化
ok,今天的opencv学习还是挺满意的,接下来要再接再厉啦~~
相关文章推荐
- OpenCV实现彩色图像转换为灰度图及二值化处理
- 【OpenCV_09】平滑/模糊图片 Smooth / Blur Images及 彩色图转 灰度图和二值化
- opencv+cuda实现彩色图转灰度图或二值化
- opencv简单的彩色图像灰度化和二值化(学习笔记)
- opencv学习笔记(八)彩色视频转换成黑白视频
- 在ios中使用opencv将彩色图片转换成为灰度图,uiimageview无法显示问题
- 学习OpenCV彩色图像的通道的分离(split)与合成(merge)
- OpenCV 用imread函数读入灰度图变成彩色图(三通道)怎么回事?
- [学习opencv]彩色图像通道分离、合成
- OpenCV学习之利用Camshift算法进行彩色目标的跟踪
- opencv灰度图转换成彩色图
- 【OpenCV学习笔记 004】 图像的缩放、Canny边缘检测和图像的二值化
- opencv摄像头采集图像彩色图转换成灰度图
- Python OpenCV学习笔记之:计算彩色图像各通道的直方图及图像区域直方图
- opencv之灰度图与彩色图的对比
- 【OPENCV】图像的预处理(灰度图、二值化、字符矫正(旋转))
- Opencv中的Bug(实现读入一个彩色视频文件并以灰度格式输出这个视频文件,学习opencv例2-10)
- OpenCV学习(十四)之彩色图像RGB通道的分离、合并与显示
- 学习OpenCV——绘制彩色直方图(HSV2BGR)
- opencv学习-鼠标画彩色图(改变绘制颜色和线宽)