数字图像处理实验教程-V3.1-zsj(2)

2019-04-15 13:51

数字图像处理实验教程 V3.1

依次打开Tools->Options->Directories: 在Library files中,添加如下目录: (三)配置项目

要使得VC6.0项目能够支持OpenCV,需要在项目中添加

OpenCV的库文件链接,使程序能够知道所用的函数是来自哪个库。 依次打开Project->Settings->Link,在Object/library modules中,添加所需要的lib文件,以空格分开。通常包括(6个):

cxcore.lib cv.lib cvaux.lib highgui.lib cvcam.lib ml.lib

(4) 如何修改程序,使得程序可以显示多幅图像? 5. 练习

【基础练习】试着不用参考给定例程,自己写出本次实验的代码,掌握OpenCV图像处理程序的基本流程和框架。

【扩展练习】编程实现加载并显示三幅图像,其中一幅通过指定文件名的方式读取,另外两幅通过外部输入参数读取。

1. #include 2. #include 3. #include 4.

5. using namespace std; 6.

7. #pragma comment(lib, \ 8. #pragma comment(lib, \ 9. #pragma comment(lib, \ 10.

11. void imshowMany(const std::string& _winName, const vector& _imgs)

; 12.

13. int main(void) 14. {

15. std::vector imgs(6); 16. imgs[0] = cvLoadImage(\); 17. imgs[1] = cvLoadImage(\); 18. imgs[2] = cvLoadImage(\); 19. imgs[3] = cvLoadImage(\); 20. imgs[4] = cvLoadImage(\); 21. imgs[5] = cvLoadImage(\); 22.

23. imshowMany(\, imgs); 24. cvWaitKey(); 25.

6

数字图像处理实验教程 V3.1

26. return 0; 27. } 28.

29. void imshowMany(const std::string& _winName, const vector& _imgs)

30. {

31. int nImg = (int)_imgs.size(); 32.

33. IplImage* dispImg; 34.

35. int size; 36. int x, y; 37.

38. // w - Maximum number of images in a row 39. // h - Maximum number of images in a column 40. int w, h;

41. // scale - How much we have to resize the image 42. float scale; 43. int max; 44.

45. if (nImg <= 0) 46. {

47. printf(\); 48. return; 49. }

50. else if (nImg > 12) 51. {

52. printf(\); 53. return; 54. } 55.

56. else if (nImg == 1) 57. {

58. w = h = 1; 59. size = 300; 60. }

61. else if (nImg == 2) 62. {

63. w = 2; h = 1; 64. size = 300; 65. }

66. else if (nImg == 3 || nImg == 4) 67. {

68. w = 2; h = 2;

7

数字图像处理实验教程 V3.1

69. size = 300; 70. }

71. else if (nImg == 5 || nImg == 6) 72. {

73. w = 3; h = 2; 74. size = 200; 75. }

76. else if (nImg == 7 || nImg == 8) 77. {

78. w = 4; h = 2; 79. size = 200; 80. } 81. else 82. {

83. w = 4; h = 3; 84. size = 150; 85. } 86.

87. dispImg = cvCreateImage(cvSize(100 + size*w, 60 + size*h), IPL_DEPTH_8U,

3); 88.

89. for (int i= 0, m=20, n=20; i

91. x = _imgs[i]->height; 92. y = _imgs[i]->width; 93.

94. max = (x > y)? x: y;

95. scale = (float) ( (float) max / size ); 96.

97. if (i%w==0 && m!=20) 98. {

99. m = 20; 100. n += 20+size; 101. }

102. cvSetImageROI(dispImg,cvRect(m, n, (int)(x/scale), (int)(y/scale)))

;

103. cvResize(_imgs[i], dispImg); 104. cvResetImageROI(dispImg); 105. } 106.

107. cvNamedWindow(_winName.c_str()); 108. cvShowImage(_winName.c_str(), dispImg); 109. }

8

数字图像处理实验教程 V3.1

6. 实验报告要求

实验报告要求写明以下7方面内容: (1) 写明实验目的。

(2) 写明实验内容和步骤。

(3) 写出完整的控制台程序代码,并加详细的注释。(仅对hello.c) (4) 描绘并解释实验结果,并对实验结果进行分析。 (5) 写明实验中存在的不足,以及改进的方法。 (6) 回答实验中涉及到的问题。 (7) 写出本次实验的体会。 7. 预习内容

(1)如何用摄像头采集图像并进行显示? (2)OpenCV功能的进一步了解。 8. 参考程序代码 /* 程序名:hello.cpp

功 能:读入指定文件,并在屏幕上显示 */

#include \

#include \

#define FILENAME \使用宏定义,指定图像文件名

void main() {

IplImage* pImg;//定义图像结构变量指针

pImg=cvLoadImage(FILENAME,1);//加载指定文件

cvNamedWindow(\创建窗口,第2个参数为1表示固定大小,0表示可变大小

cvShowImage(\在指定窗口显示图像文件

cvWaitKey(0);//等待按键,若无此句,程序运行时看不到结果 cvDestroyWindow(\销毁窗口 cvReleaseImage(&pImg);//释放图像文件 }

/* 程序名:hello2.cpp

功 能:从磁盘中读入任意图像文件,并将图像显示在屏幕上 */

#include \

#include \

//在main函数中,argc表示主程序接收的参数个数,argv数组接收程序参数 //如:当argc=2时,argv[0]表示第0个参数(可执行程序本身),argv[1]表示第1个参数(需人为输入)

9

数字图像处理实验教程 V3.1

//当argc=1时,表示不需要从外界接收参数 int main(int argc, char** argv) {

IplImage* pImg;//声明IplImage指针

//载入图像

if (argc==2 改为1&& (pImg=cvLoadImage(argv[1],1))!=0) { cvNamedWindow(\创建窗口 cvShowImage(\显示图像 cvWaitKey(0);//等待按键 cvDestroyWindow(\销毁窗口 cvReleaseImage(&pImg);//释放图像 return 0; }

return -1; }

9. OpenCV函数解释

OpenCV的函数和数据类型命名规则如下:

(1) 宏全部使用大写字符,字间用下划线分隔,如:CV_MAX_DIM,

IPL_DEPTH_32F。

(2) 数据类型以Cv开头,如:CvSize,CvPoint3D64f等。 (3) 函数以cv开头,如:cvLoadImage、cvSaveImage等。

需要包含的OpenCV头文件:

\:OpenCV的基本函数头文件。

\:用于用户GUI界面设计的OpenCV专用库,包括很多Windows API接口函数。

OpenCV基本函数:

cvLoadImage从文件读取图像

语法:IplImage* cvLoadImage(const char* filename,int flag=1) 参数:

filename:待载入的文件名,包括扩展名。可以载入BMP,DIB,JPEG,PNG,PBM,PGM,PPM,SR,RAS和TIFF等文件格式。 flag表示是否是彩色图像(多通道),默认为1,表示读入的图像被强制为3通道的彩色图像

flag=0,表示载入图像强制为单通道灰度图像

flag<0,表示载入图像由文件中的图像通道数决定。 返回值为IplImage结构指针。

10


数字图像处理实验教程-V3.1-zsj(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:2014年宜春国编教师招聘面试说课中应注意的几个问题[宜春华图]

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: