📄 c+m+b mmvi opencv 编程入门.htm
字号:
color=#0000ff>其他数据结构</FONT></U></A> </LI></UL><BR>
<LI><A
href="http://yujian5.spaces.live.com/Blog/cns!6CDC9EF6CBD6E27C!531.entry?owner=1"><U><FONT
color=#0000ff>图像处理</FONT></U></A>
<UL>
<LI><A
href="http://yujian5.spaces.live.com/Blog/cns!6CDC9EF6CBD6E27C!531.entry?owner=1"><U><FONT
color=#0000ff>创建与释放图像结构空间</FONT></U></A>
<LI><A
href="http://yujian5.spaces.live.com/Blog/cns!6CDC9EF6CBD6E27C!531.entry?owner=1"><U><FONT
color=#0000ff>读入与存储图像</FONT></U></A>
<LI><A
href="http://yujian5.spaces.live.com/Blog/cns!6CDC9EF6CBD6E27C!531.entry?owner=1"><U><FONT
color=#0000ff>读取图像元素</FONT></U></A>
<LI><A
href="http://yujian5.spaces.live.com/Blog/cns!6CDC9EF6CBD6E27C!531.entry?owner=1"><U><FONT
color=#0000ff>图像转换</FONT></U></A>
<LI><A
href="http://yujian5.spaces.live.com/Blog/cns!6CDC9EF6CBD6E27C!531.entry?owner=1"><U><FONT
color=#0000ff>绘图命令</FONT></U></A> </LI></UL><BR>
<LI><A
href="http://yujian5.spaces.live.com/Blog/cns!6CDC9EF6CBD6E27C!531.entry?owner=1"><U><FONT
color=#0000ff>矩阵操作</FONT></U></A>
<UL>
<LI><A
href="http://yujian5.spaces.live.com/Blog/cns!6CDC9EF6CBD6E27C!531.entry?owner=1"><U><FONT
color=#0000ff>创建与释放矩阵结构空间</FONT></U></A>
<LI><A
href="http://yujian5.spaces.live.com/Blog/cns!6CDC9EF6CBD6E27C!531.entry?owner=1"><U><FONT
color=#0000ff>读取矩阵元素</FONT></U></A>
<LI><A
href="http://yujian5.spaces.live.com/Blog/cns!6CDC9EF6CBD6E27C!531.entry?owner=1"><U><FONT
color=#0000ff>矩阵/向量操作</FONT></U></A></LI></UL><BR>
<LI><A
href="http://yujian5.spaces.live.com/Blog/cns!6CDC9EF6CBD6E27C!531.entry?owner=1"><U><FONT
color=#0000ff>视频序列处理</FONT></U></A>
<UL>
<LI><A
href="http://yujian5.spaces.live.com/Blog/cns!6CDC9EF6CBD6E27C!531.entry?owner=1"><U><FONT
color=#0000ff>从视频序列中抓取一帧</FONT></U></A>
<LI><A
href="http://yujian5.spaces.live.com/Blog/cns!6CDC9EF6CBD6E27C!531.entry?owner=1"><U><FONT
color=#0000ff>获取/设定帧信息</FONT></U></A>
<LI><A
href="http://yujian5.spaces.live.com/Blog/cns!6CDC9EF6CBD6E27C!531.entry?owner=1"><U><FONT
color=#0000ff>存储视频文件</FONT></U></A> </LI></UL></LI></UL>
<P></P>
<P></P>
<P></P>
<H1><A>简介</A> </H1>
<P></P>
<H2><A>OpenCV概述</A> </H2>
<P></P>
<UL>
<LI>什么是OpenCV
<UL>
<LI>开源C/C++计算机视觉库.
<LI>面向实时应用进行优化.
<LI>跨操作系统/硬件/窗口管理器.
<LI>通用图像/视频载入、存储和获取.
<LI>由中、高层API构成.
<LI>为Intel®公司的 Integrated Performance Primitives (IPP) 提供了透明接口.
</LI></UL>
<P></P>
<LI>特性:
<UL>
<LI>图像数据操作 (分配,释放, 复制, 设定, 转换).
<LI>图像与视频 I/O (基于文件/摄像头输入, 图像/视频文件输出).
<LI>矩阵与向量操作与线性代数计算(相乘, 求解, 特征值, <FONT size=2>奇异值分解</FONT>SVD).
<LI>各种动态数据结构(列表, 队列, 集, 树, 图).
<LI>基本图像处理(滤波, 边缘检测, 角点检测, 采样与插值, 色彩转换, 形态操作, 直方图, 图像金字塔).
<LI>结构分析(连接成分, 轮廓处理, 距离转换, 模板匹配, Hough转换, 多边形近似, 线性拟合, 椭圆拟合,
Delaunay三角化).
<LI>摄像头标定 (寻找并跟踪标定模板, 标定, 基础矩阵估计, homography估计, 立体匹配).
<LI>动作分析(光流, 动作分割, 跟踪).
<LI>对象辨识 (特征方法, 隐马可夫链模型HMM).
<LI>基本GUI(显示图像/视频, 键盘鼠标操作, 滚动条).
<LI>图像标识 (直线, 圆锥, 多边形, 文本绘图) </LI></UL>
<P></P>
<LI>OpenCV 模块:
<UL>
<LI><EM>cv</EM> - OpenCV 主要函数.
<LI><EM>cvaux</EM> - 辅助 (实验性) OpenCV 函数.
<LI><EM>cxcore</EM> - 数据结构与线性代数算法.
<LI><EM>highgui</EM> - GUI函数. </LI></UL>
<P></P></LI></UL>
<P></P>
<H2><A>资料链接</A> </H2>
<P></P>
<UL>
<LI>参考手册:
<UL>
<LI><TT><opencv-root>/docs/index.htm</TT> </LI></UL>
<P></P>
<LI>网络资源:
<UL>
<LI>官方网页: <TT>http://www.intel.com/technology/computing/opencv/</TT>
<P></P>
<LI>软件下载: <TT>http://sourceforge.net/projects/opencvlibrary/</TT>
<P></P></LI></UL>
<P></P>
<LI>书籍:
<UL>
<LI>Open Source Computer Vision Library by Gary R. Bradski, Vadim
Pisarevsky, and Jean-Yves Bouguet, Springer, 1st ed. (June, 2006).
</LI></UL>
<P></P>
<LI>视频处理例程 (位于 <TT><opencv-root>/samples/c/目录中</TT>):
<UL>
<LI>色彩跟踪: <TT>camshiftdemo</TT>
<LI>点跟踪: <TT>lkdemo</TT>
<LI>动作分割: <TT>motempl</TT>
<LI>边缘检测: <TT>laplace</TT> </LI></UL>
<P></P>
<LI>图像处理例程(位于<TT><opencv-root>/samples/c/目录中</TT>):
<UL>
<LI>边缘检测: <TT>edge</TT>
<LI>分割: <TT>pyramid_segmentation</TT>
<LI>形态: <TT>morphology</TT>
<LI>直方图: <TT>demhist</TT>
<LI>距离转换: <TT>distrans</TT>
<LI>椭圆拟合 <TT>fitellipse</TT> </LI></UL>
<P></P></LI></UL>
<P></P>
<P></P>
<H2><A>OpenCV 命名约定</A> </H2>
<P></P>
<UL>
<LI>函数命名: <PRE> cvActionTarget[Mod](...)<BR><BR> Action = 核心功能(例如 设定set, 创建create)<BR> Target = 操作目标 (例如 轮廓contour, 多边形polygon)<BR> [Mod] = 可选修饰词 (例如说明参数类型)<BR></PRE>
<P></P>
<LI>矩阵数据类型: <PRE> CV_<bit_depth>(S|U|F)C<number_of_channels><BR><BR> S = 带符号整数<BR> U = 无符号整数<BR> F = 浮点数 <BR><BR> 例: CV_8UC1 表示一个8位无符号单通道矩阵, <BR> CV_32FC2 表示一个32位浮点双通道矩阵.<BR></PRE>
<P></P>
<LI>图像数据类型: <PRE> IPL_DEPTH_<bit_depth>(S|U|F)<BR><BR> 例: IPL_DEPTH_8U 表示一个8位无符号图像.<BR> IPL_DEPTH_32F 表示一个32位浮点数图像.<BR></PRE>
<P></P>
<LI>头文件: <PRE> #include <cv.h><BR> #include <cvaux.h><BR> #include <highgui.h> <BR> #include <cxcore.h> // 不必要 - 该头文件已在 cv.h 文件中包含<BR></PRE>
<P></P></LI></UL>
<P></P>
<H2><A>编译命令</A> </H2>
<P></P>
<UL>
<LI>Linux系统: <PRE>g++ hello-world.cpp -o hello-world \<BR> -I /usr/local/include/opencv -L /usr/local/lib \<BR> -lm -lcv -lhighgui -lcvaux<BR></PRE>
<P></P>
<LI>Windows系统: <PRE>注意在项目属性中设好OpenCV头文件以及库文件的路径.<BR></PRE>
<P></P></LI></UL>
<P></P>
<P></P>
<H2><A>C程序实例</A> </H2>
<P><FONT size=-1></FONT></P>
<P><FONT size=-1></FONT></P><PRE>////////////////////////////////////////////////////////////////////////<BR>//<BR>// hello-world.cpp<BR>//<BR>// 一个简单的OpenCV程序<BR>// 它从一个文件中读取图像,将色彩值颠倒,并显示结果. <BR>//<BR>////////////////////////////////////////////////////////////////////////<BR>#include <stdlib.h><BR>#include <stdio.h><BR>#include <math.h><BR>#include <cv.h><BR>#include <highgui.h><BR><BR><BR>int main(int argc, char *argv[])<BR>{<BR> IplImage* img = 0; <BR> int height,width,step,channels;<BR> uchar *data;<BR> int i,j,k;<BR><BR> if(argc<2){<BR> printf("Usage: main <image-file-name>\n\7");<BR> exit(0);<BR> }<BR><BR> // 载入图像 <BR> img=cvLoadImage(argv[1]);<BR> if(!img){<BR> printf("Could not load image file: %s\n",argv[1]);<BR> exit(0);<BR> }<BR><BR> // 获取图像数据<BR> height = img->height;<BR> width = img->width;<BR> step = img->widthStep;<BR> channels = img->nChannels;<BR> data = (uchar *)img->imageData;<BR> printf("Processing a %dx%d image with %d channels\n",height,width,channels); <BR><BR> // 创建窗口<BR> cvNamedWindow("mainWin", CV_WINDOW_AUTOSIZE); <BR> cvMoveWindow("mainWin", 100, 100);<BR><BR> // 反色图像<BR> for(i=0;i<height;i++) for(j=0;j<width;j++) for(k=0;k<channels;k++)<BR> data[i*step+j*channels+k]=255-data[i*step+j*channels+k];<BR><BR> // 显示图像<BR> cvShowImage("mainWin", img );<BR><BR> // wait for a key<BR> cvWaitKey(0);<BR><BR> // release the image<BR> cvReleaseImage(&img );<BR> return 0;<BR>}<BR></PRE><FONT
size=-1></FONT>
<P><FONT size=-1></FONT></P>
<P></P>
<P></P>
<H1><A>GUI命令</A> </H1>
<P></P>
<H2><A>窗口管理</A> </H2>
<P></P>
<UL>
<LI>创建并放置一个窗口: <PRE> cvNamedWindow("win1", CV_WINDOW_AUTOSIZE); <BR> cvMoveWindow("win1", 100, 100); // 以屏幕左上角为起点的偏移量<BR></PRE>
<P></P>
<LI>读入图像: <PRE> IplImage* img=0; <BR> img=cvLoadImage(fileName);<BR> if(!img) printf("Could not load image file: %s\n",fileName);<BR></PRE>
<P></P>
<LI>显示图像: <PRE> cvShowImage("win1",img);<BR></PRE>
<P>可显示彩色或灰度的字节/浮点图像。 彩色图像数据认定为BGR顺序. </P>
<P></P>
<LI>关闭窗口: <PRE> cvDestroyWindow("win1");<BR></PRE>
<P></P>
<LI>改变窗口尺寸: <PRE> cvResizeWindow("win1",100,100); // 新的宽/高值(象素点)</PRE>
<P></P></LI></UL>
<P></P>
<P></P>
<H2><A>输入设备</A> </H2>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -