数字图像处理实验教程 V3.1
实验2 图像采集与显示(综合性,第2章)
1. 实验目的
(1) 了解OpenCV中使用摄像头采集图像的方法。
(2) 掌握OpenCV进行图像采集、存储与显示的实现方法。 2. 实验内容
编写程序,用摄像头采集彩色图像并进行彩色和灰度显示。
3. 实验步骤(验证性实验)
(1) 首先保证计算机安装了某个摄像头(webcam)及其驱动程序,摄像头能
正常采集。
(2) 创建OpenCV控制台项目。
(3) 添加源文件gray.cpp,并输入相关代码。 (4) 编译、连接、运行,得到实验结果。 4. 实验回答问题
(1) IplImage结构体中imageData的格式是什么样的?Char* (2) 函数cvCreateImage的最后一个参数的含义是什么? channels每个图元的颜色通道数。 可以是 1, 2, 3 或 4.通道是交叉存取的
(3) 画出示例代码gray.cpp程序的流程图。 5. 练习
【基础练习】修改程序,使得程序能读取硬盘上的AVI视频文件并逐帧显示。 【扩展练习】自己编写完整程序实现以下功能: (1) 创建一个窗口 (2) 载入图像 (3) 显示图像
(4) 创建一幅新图像
(5) 将原图像转换为灰度图像赋给新图像 (6) 在新窗口显示新图像 (7) 销毁窗口,释放图像 6. 实验报告要求
实验报告要求写明以下7方面内容: (1) 写明实验目的。
(2) 写明实验内容和步骤。
(3) 写出完整的控制台程序代码,并加详细的注释。 (4) 描绘并解释实验结果,并对实验结果进行分析。 (5) 写明实验中存在的不足,以及改进的方法。 (6) 回答实验中涉及到的问题。 (7) 写出本次实验的体会。 7. 预习内容
(1) 图像坐标变换有哪些?掌握每种变换的公式。 (2) 图像坐标变换的级联。 8. 参考程序代码 /* 程序名:gray.cpp
16
数字图像处理实验教程 V3.1
说 明:从摄像头采集图像,并转化为灰度图显示 */
#include
int main( int argc, char** argv ) {
//声明IplImage指针
IplImage* pFrame = NULL; IplImage* pFrImg = NULL; CvCapture* pCapture = NULL;
int nFrmNum = 0;
//创建窗口
cvNamedWindow(\ cvMoveWindow(\ cvNamedWindow(\ cvMoveWindow(\
if( !(pCapture = cvCaptureFromCAM(-1)))//从摄像头获取图像
//if( !(pCapture = cvCaptureFromAVI(“sea.avi”))) //从视频文件获取图像 { fprintf(stderr, \报错 return -2; }
//逐帧读取视频
while(pFrame = cvQueryFrame( pCapture )) { nFrmNum++;
//如果是第一帧,需要申请内存,并初始化 if(nFrmNum == 1) { pFrImg = cvCreateImage(cvSize(pFrame->width, pFrame->height), IPL_DEPTH_8U,1);
pFrImg->origin=1;//设置图像数据起点为左下角,可设0查看不同结果 }
cvCvtColor(pFrame, pFrImg, CV_RGB2GRAY); //转化成单通道图像(灰度图像)
17
数字图像处理实验教程 V3.1
//显示图像
cvShowImage(\ cvShowImage(\ //等待按键事件 cvWaitKey(2);//当前帧采集到之后延迟2毫秒,以便能实现连续显示视频的效果 //cvWaitKey(0);//若参数为0,则无限制等待按键,只能显示第一帧图像 }
//销毁窗口
cvDestroyWindow(\ cvDestroyWindow(\ //释放图像和矩阵
cvReleaseImage(&pFrame); cvReleaseImage(&pFrImg); cvReleaseCapture(&pCapture); return 0; }
9. OpenCV函数解释
需要包含的OpenCV头文件 #include \#include \#include \
cxcore.h:OpenCV核函数头文件
OpenCV基本函数:
OpenCV支持从摄像头和视频文件(AVI)中捕捉图像,使用的两个函数是: cvCaptureFromCAM从摄像头捕捉图像 cvCaptureFromAVI从视频获取图像 返回值均为CvCapture结构体
cvCaptureFromCAM
功能:给从摄像头得到的视频流分配和初始化CvCapture结构。 语法:CvCapture* cvCaptureFromCAM( int index ); 参数:index 要使用的摄像头索引,默认为-1。
cvQueryFrame获取视频序列帧的每一帧
语法:IplImage* cvQueryFrame( CvCapture* capture ); 参数:capture 视频获取结构。
cvCreateImage创建图像函数
语法:IplImage *cvCreateImage(CvSize size, int depth, int channels)
18
数字图像处理实验教程 V3.1
参数:size:图像的宽、高。depth:图像图元深度。channels每个图元的颜色通道数。
返回值:IplImage结构体。
cvMoveWindow移动窗口函数
语法:void cvMoveWindows(name,int x,int y)
参数:name:窗口的名称。X:窗口左上角的x坐标。Y:窗口左上角的Y坐标。
cvGetWindowHandle获取窗口句柄函数 传入参数为窗口名称。 返回值为窗口的句柄。
cvCvtColor色彩空间转换函数
语法:void cvCvtColor(const CvArr* src, CvArr* dst, int code) 参数:src为源图像的不定数组,CvArr*指针,一般情况为IplImage型指针。Dst:目的地址的CvArr指针,一般为IplImage型结构体。Code:色彩转换空间, 常数定义为CV_
19
数字图像处理实验教程 V3.1
实验3 图像坐标变换(综合性,第2章)
1. 实验目的
(1) 掌握图像坐标变换的原理和方法。
(2) 能设计相应代码实现图像的旋转与缩放变换。 2. 实验内容
编写程序用OpenCV实现对图像的各种空间变换。需要实现的功能有:旋转与缩放。
3. 实验步骤(综合性实验) (1) 新建源文件rotate.cpp。
(2) 编写程序代码,使程序可以对图像进行旋转与缩放。 (3) 编译、连接(生成工作区)、运行该文件,得到实验结果。
(4) 通过给定的函数,理解所给代码的功能进而改写程序代码,使程序可以
对图像实现指定的空间变换,包括平移、旋转、缩放。 4. 实验回答问题
(1) 请给出图像坐标变换的基本公式和实现原理,并着重说明例程中的算法。 (2) 写出平移矩阵、缩放矩阵、旋转(绕z轴)矩阵。 5. 练习
【基础练习】
(1) 修改例程,使得程序可以每次按键旋转一次图像。(这个修改在现在的代
码上比较困难,需要把rotate函数解开,直接在main函数里写) (2) 修改例程,使得程序可以连续循环地旋转图像。
答:将 if( cvWaitKey(5) == 27 )//如果按键为Escape键,则退出循环 break;
angle =(int) (angle + delta) % 360; 中的break注释掉
【扩展练习】
(1)使用cvFlip函数实现图像绕x,y轴或中心旋转。
(2)修改例程,使得程序可以在旋转图像的同时缩放图像。 【高层进阶】
(1) 使用cvResize函数实现图像的缩放功能。
(2) 编写程序,实现图像的平移、旋转和缩放综合功能。 6. 实验报告要求
实验报告要求写明以下7方面内容: (1) 写明实验目的。
(2) 写明实验内容和步骤。
(3) 写出空间变换所涉及的图像处理函数,并加详细的注释。 (4) 描绘并解释实验结果,并对实验结果进行分析。 (5) 写明实验中存在的不足,以及改进的方法。 (6) 回答实验中涉及到的问题。 (7) 写出本次实验的体会。 7. 预习内容
20
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库数字图像处理实验教程-V3.1-zsj(4)在线全文阅读。
相关推荐: