opencv实验报告
- 格式:doc
- 大小:144.00 KB
- 文档页数:6
《遥感原理与应用课程设计》实习报告学院: 遥感信息工程学院班级:学号:姓名:实习地点: 5-325机房指导教师: 石文轩2016年 6 月16 日基于多项式的遥感图像几何纠正摘要:本次实习大致分为两个部分,第一部分是通过调用OpenCV 函数实现遥感图像的基本处理,我们小组选择的题目是专题二,对彩色图像进行缩放、旋转等几何操作。
第二部分是自主编程实现遥感图像处理,我们小组抽到的是基于多项式的遥感图像几何纠正,包括纠正多项式系数的解算,纠正变换函数的建立,坐标转换和灰度重采样的算法原理与编程实现。
本文主要介绍实现第二个任务的主要原理,具体步骤,试验结果展示以及遇到的问题分析和心得总结。
关键词:多项式,几何纠正,重采样1 原理介绍1.1 利用地面已知控制点求解多项式系数一般多项式纠正的变换公式如下:上式中,x,y为像素的原始图像坐标,X,Y为同名像素点的地面坐标。
利用地面已知控制点求解多项式系数的具体步骤如下:1.1.1 列出误差方程式1.1.2 构成法方程1.1.3计算多项式系数1.1.4 精度判定其中,n为控制点的个数,N为纠正系数的个数,n-N 为多余观测数。
评定精度的步骤是设定一个限差ε,作为精度评定的标准,如果通过上式计算出的δ>ε,则说明计算结果存在一定程度的粗差,精度超限结果不可取。
并对每一个控制点上的平差残余误差Vx,Vy进行比较检查,将最大者视为粗差并将其剔除或重新选点进行平差,直至满足δ<ε的精度评定标准为止。
1.2 遥感图像的几何纠正变换在进行遥感图像的几何纠正变换之前,需要先在计算机中为输出图像开辟一定的存储空间,即确定输出图像的空间边界以及地图地面坐标值。
1.2.1 把原始图像的四个角点坐标按照纠正变换函数计算出投影到地图坐标系统中的坐标值:(X1,Y1), (X2,Y2), (X3,Y3), (X4,Y4)。
1.2.2 对上述四个坐标按照横、纵坐标分别分组并求出最大最小值,所得结果即为纠正后图像的边界的地图坐标系的值。
XI`AN TECHNOLOGICAL UNIVERSITY实验报告实验七使用OPENCV对两幅图像求和西安工业大学实验报告一、实验目的使用OpenCV对两幅图像求和二、实验原理线性混合操作也是一种典型的二元(两个输入)的像素操作:通过在范围 0 \rightarrow 1内改变 \alpha ,这个操可以用来对两幅图像或两段视频产生时间上的画面叠化(cross-dissolve)效果三、实验步骤、数据记录及处理示例代码1.<span style="font-size:18px;">#include<opencv2\highgui\highgui.hpp>2.#include<opencv2\imgproc\imgproc.hpp>3.4.#include <iostream>5.ing namespace std;ing namespace cv;8.9.int main()10.{11. Mat src1 = imread("src1.jpg");12. Mat src2 = imread("src2.jpg");13.14.if (!src1.data||!src2.data)15. {16. cout<<"没有成功加载图像!"<<endl;17.return -1;18. }19. namedWindow("原始图像1");20. imshow("原始图像1",src1);21. namedWindow("原始图像2");22. imshow("原始图像2",src2);23.24.double alpha = 0.5;25.double beta = 1-alpha;26.27. Mat dst;28. addWeighted(src1,alpha,src2,beta,0.0,dst);29. namedWindow("混合后图像");30. imshow("混合后图像",dst);31.32. waitKey(0);33.return 0;34.}</span>需要注意的是:既然要把两幅图像线性混合,即对应像素一一线性相加,因此src1,src2应大小相同1.<span style="font-size:18px;">addWeighted( src1, alpha, src2, beta, 0.0, dst);</span>功能:src1和src2逐像素按照开始的公式相加参数:src1 --- 输入图像1Alpha --- src1在dst中所占比例Src2 --- 输入图像2Beta --- src2在dst中所占的比例Gama --- 与混合后的值相加存入dst中Dst --- 输出图像。
基于opencv的GHT图像处理算法研究-实验报告(1)《基于opencv的GHT图像处理算法研究》实验报告实验项目名称:基于opencv的GHT图像处理算法研究学号姓名专业班级实验地点指导教师实验时间一、实验目的及要求1.理解OpenCV环境安装与配置的基本方法和过程2.掌握GHT的基本工作原理3.掌握GHT的实验方法及特点二、实验设备(环境)及要求PC机一台、Windows Xp或Windows 7操作系统、VS2008软件一套三、实验内容与步骤1.安装windows 7虚拟机、vs2008和opencv2.3(需要按照顺序安装)(1)Vmware虚拟机中windows 7操作系统安装过程(2)VS2008安装过程(3)Opencv2.3开发包安装过程(不编译源码)双击,选择存在路径进行配置:C:\Users\win7\Desktop\opencv\build\common\tbb\ia32C:\Users\win7\Desktop\opencv\build\x86\vc9\bin新建控制台工程配置属性打开新建工程HelloOpenCV的属性窗口,选择“配置属性”-->“链接器”--“输入”,在右边的“附加依赖项”中输入:opencv_calib3d231d.lib; opencv_contrib231d.lib;opencv_core231d.lib; opencv_features2d231d.lib;opencv_flann231d.lib;opencv_gpu231d.lib;opencv_highgui231d.lib; opencv_imgproc231d.lib;opencv_legacy231d.lib; opencv_ml231d.lib;opencv_objdetect231d.lib; opencv_ts231d.lib;opencv_video231d.lib这是默认的Debug环境配置,下面将“配置”下拉列表中的Debug 改为“Release”,同样在其“附加依赖项”中输入opencv_calib3d231.lib; opencv_contrib231.lib; opencv_core231.lib; opencv_features2d231.lib; opencv_flann231.lib; opencv_gpu231.lib; opencv_highgui231.lib; opencv_imgproc231.lib; opencv_legacy231.lib; opencv_ml231.lib; opencv_objdetect231.lib; opencv_ts231.lib; opencv_video231.lib测试代码:#include "stdafx.h"#include <opencv2/opencv.hpp>using namespace std;using namespace cv;int main(int argc, char* argv[]){const char* imagename = "C:\\Users\\zxc\\Desktop\\a.bmp";//从文件中读入图像Mat img = imread(imagename);//如果读入图像失败if(img.empty()){fprintf(stderr, "Can not load image %s\n", imagename);return -1;}//显示图像imshow("image", img);//此函数等待按键,按键盘任意键就返回waitKey();return 0;}2.GHT工作原理分析(请结合示例代码分析)(1)图像梯度计算原理利用Sobel算子得到图像的在x方向和y方向上的一阶导vx,vy,也即对图像做边缘处理。
实验一:OpenCV的使用1.什么是OpenCVOpenCV是Intel开源计算机视觉库。
它由一系列 C 函数和少量 C++ 类构成,实现了图像处理和计算机视觉方面的很多通用算法。
2.在Developer Studio 下创建基于OpenCV 的项目:1.在Developer Studio 中创建新的应用程序:(1)选择菜单"File"->"New..."->"Projects" 标签。
选择"Win32 Application" 或者"Win32 console application" - 后者是简单的方法,例程都采用这种类型。
(2)键入项目名称,并且选择保存位置。
(3)可以为项目创建一个单独的workspace ("Create new workspace"),也可以将新的项目加入到当前的workspace 中("Add to current workspace")。
(4)单击"next" 按钮。
(5)选择"An empty project",点击"Finish","OK"。
经过以上步骤,Developer Studio 会创建一个项目目录(缺省情况下,目录名就是项目名),<project name>.dsp 文件以及<project name>.dsw,.ncb 等,如果你创建自己的workspace。
2.添加文件到project 中:选择菜单"File"->"New..."->"Files" 。
选择"C++ Source File", 键入文件名,点击"OK" 。
XI`AN TECHNOLOGICAL UNIVERSITY实验报告实验三 OPENCV的基本图像操作西安工业大学实验报告一、实验目的了解opencv的基本图像操作,并运用opencv对图像进行操作。
二、实验原理Opencv中含有很多的图像处理功能,这里介绍一些基本的图像操作。
三、实验步骤、数据记录及处理1. 矩阵数据类型通用矩阵数据类型:CV_<bit_depth>(S|U|F)C<number_of_channels>其中,S表示带符号整数;U表示无符号整数;F表示浮点数;例如:CV_8UC1 表示8位无符号单通道矩阵;CV_32FC2 表示32位浮点数双通道矩阵;2. 图像数据类型通用图像数据类型为:IPL_DEPTH_<bit_depth>(S|U|F)如:IPL_DEPTH_8U 表示8位无符号整数图像;IPL_DEPTH_32F 表示32位浮点数图像;3. 分配和释放图像3.1 分配一幅图像IpIImage * cvCreateImage(cvSize size, int depth, int channels); 其中size可以用cvSize(width, height)得到。
depth为像素的单位,包括:IPL_DEPTH_8UIPL_DEPTH_8SIPL_DEPTH_16UIPL_DEPTH_16SIPL_DEPTH_32SIPL_DEPTH_32FIPL_DEPTH_64Fchannels为每个像素的通道数,可以是1,2,3或4。
通道是交叉排列的,一幅彩色图像的通常的排列顺序是:b0 g0 r0 b1 g1 r1 ...例如:分配一个单通道单字节图像的语句是:IpIImage* img1 = cvCreateImage(cvSize(640, 480), IPL_DEPTH_8U, 1); 分配一个三通道浮点数图像语句是:IpIImage* img2 = cvCreateImage(cvSize(640, 480), IPL_DEPTH_32F, 3);3.2 释放图像void cvReleaseImage(IpIImage **);3.3 复制一幅图像IpIImage* cvCloneImage(IpIImage *);如:IpIImage* img1 = cvCreateImage(cvSize(640, 480), IPL_DEPTH_8U, 1); IpIImage* img2;img2 = cvCloneImage(img1);3.4 设置或得到感兴趣区域ROIvoid cvSetImageROI(IpIImage* image, cvRect rect);void cvResetImageROI(IpIImage* image);vRect cvGetImageROI(const IpIImage* image);4. 图像的读写4.1 从文件中获取图像从文件中读取图像可以采用下面的语句:IpIImage* img = 0;img = cvLoadImage(filename);if (!img)printf("Could not load image file: %s\n", filename);默认为读取三通道图像。
opencv摄像头人脸检测实验报告思考题OCR(Optical Character Recognition,光学字符识别)是一种基于计算机视觉和图像处理的技术,可以将文字、数字或字母等非图像文本信息转换为可识别的字符,广泛应用于机器翻译、信息抽取、文本识别等领域。
下面是一个使用 OpenCV 进行 OCR 实验的例子。
在这个实验中,我们希望通过识别从摄像头拍摄的照片中提取文本信息,实现一个简单的 OCR 程序。
1. 研究 OCR 的基本原理和算法,了解如何将摄像头拍摄的图像转换为可识别的文本。
2. 安装和配置 OpenCV 库,包括安装所需的 Python 版本和一些必要的库。
3. 使用 OpenCV 中的imread() 函数读取摄像头拍摄的图像,使用cv2.VideoCapture() 函数获取图像的帧数。
4. 使用 cv2.VideoWriter() 函数将读取的图像写入一个文件,使用 OpenCV 中的cv2.imwrite() 函数将图像保存为保存文件。
5. 使用 OpenCV 中的cv2.imread() 函数提取图像中的文本,使用cv2.getTextCount() 函数获取文本中所有字符的数量,使用cv2.findContours() 函数检测文本中的矩形框。
6. 使用 OpenCV 中的cv2.rectangle() 函数在图像中绘制矩形框,使用cv2.drawContours() 函数将矩形框转换为曲线,使用cv2. imopen() 函数将处理后的图像转换为白色背景。
7. 使用 OpenCV 中的OCR 库进行文本识别,根据获取的文本信息返回对应的文本框坐标和文字内容。
8. 根据获取的文本信息对其他文本进行处理,例如提取标题和段落。
《OpenCV图像处理》---上机实验报告 1改变图像的对比度和亮度一、实验名称:改变图像的对比度和亮度二、实验目的:1、学习opencv的一些基本操作;2、通过学习改变图像对比度和亮度可以访问像素值,用0初始化矩阵,以及saturate_cast函数是做什么用的。
三、实验内容:1、图像处理:一般来说,图像处理算子是带有一幅或多幅输入图像、产生一幅输出图像的函数。
图像变换可分为以下两种:点算子(像素变换)、领域(基于区域的)算子2、像素变换:在这一类图像处理变换中,仅仅根据输入像素值(有时可加上某些全局信息或参数)计算相应的输出像素值。
这类算子包括亮度和对比度调整,以及颜色校正和变换。
四、实验原理:亮度和对比度调整:两种常用的点过程(即点算子),是用常数对点进行乘法和加法运算:两个参数>0和一般称作增益和偏置参数。
我们往往用这两个参数来分别控制对比度和亮度。
你可以把看成源图像像素,把看成输出图像像素。
这样一来,上面的式子就能写得更清楚些:其中,i和 j表示像素位于第i行和第j列。
五、实验运行环境:Windows7操作系统,Microsoft Visual C++ 2008 Express Edition 六、实验源代码:#include<stdafx.h>#include"opencv2/core/core.hpp"#include"opencv2/highgui/highgui.hpp"#include<iostream>using namespace std;using namespace cv;double alpha;int beta;int main(int argc,char**argv){Mat image=imread("li.jpg");Mat new_image=Mat::zeros(image.size(),image.type());cout<<"Basic Linear Transforms"<<endl;cout<<"-----------------------"<<endl;cout<<"*Enter the alpha value [1.0-3.0]:";cin>>alpha;cout<<"*Enter the beta value [0-100]:";cin>>beta;for(int y=0;y<image.rows;y++){for(int x=0;x<image.cols;x++){for(int c=0;c<3;c++){new_image.at<Vec3b>(y,x)[c]=saturate_cast<uchar>(alpha*(image.at<Vec3b>(y,x)[c]) + beta);}}}namedWindow("Original Image",1);namedWindow("New Image",1);imshow("Original Image",image);imshow("New Image",new_image);waitKey();return 0;}七、实验结果:八、实验总结:通过本次实验,我熟悉并掌握了opencv和Microsoft Visual C++ 2008 Express Edition的环境配置这些基础知识,通过对opencv的学习,我熟悉了对图片的亮度和对比度改变的操作和具体代码,写代码期间遇到过很多问题,通过查阅书籍和资料都一一改正了过来,总之,代码还是不太熟悉,还有待于进一步提高。
opencv车辆检测计数实验报告结论**OpenCV车辆检测计数实验报告结论**经过对OpenCV车辆检测计数实验的进行和数据分析,我们得出以下结论:1. **车辆检测的准确性**:通过使用OpenCV的车辆检测算法,我们成功地检测到了大部分经过监控区域的车辆。
检测算法能够准确地检测到车辆的存在,并将其标识出来,从而为后续的计数提供了可靠的基础。
2. **车辆计数的精确性**:通过对经过监控区域的车辆进行计数,我们成功地记录了车辆的进出次数。
计数结果与实际观察相符,证明了OpenCV在车辆计数任务中的有效性。
然而,对于复杂交通场景或高密度交通情况,计数结果可能会受到车辆重叠或互相遮挡的影响,导致一定的计数误差。
3. **算法的效率和实时性**:OpenCV的车辆检测和计数算法在处理实时视频流时展现出了较高的效率。
算法能够快速地进行车辆检测和计数,并实时更新结果。
然而,在处理大规模视频数据或高分辨率图像时,算法的效率可能会受到一定的影响,需要使用更高性能的计算设备来提高处理速度。
4. **适应性和泛化能力**:OpenCV的车辆检测和计数算法在不同场景下表现出了较好的适应性和泛化能力。
算法能够适应多种光照条件和天气情况,并能够处理不同背景和道路结构。
然而,对于异常情况、遮挡或部分车辆的检测,算法可能需要进一步优化和改进。
综上所述,OpenCV的车辆检测计数算法在实验中表现出了较好的准确性、实时性和适应性。
然而,在实际应用中,对于复杂交通场景和高密度交通情况,算法的性能和精确性可能需要进一步改进和优化,以满足更高的要求和挑战。
注意:以上结论仅针对实验中的具体情况,实际应用中可能会因数据集、算法参数等因素的不同而有所不同。
建议在实际应用中进行进一步的测试和评估。
基于opencv的运动物体跟踪一、实验目的1.通过实验了解opencv运动物体跟踪的数据结构、函数以及基本框架;2.通过实验提高对于图像的认识;3.通过实验了解光流法、背景差分法、Camshift等主流视频跟踪算法;4.通过实验将理论和实践联系起来,提升对于理论知识的认识;二、实验要求1.调用基于intel 的开源视觉库opencv,实现视频或者摄像头的监控;2.编程实现对进入视觉范围内的运动物体实施监测与跟踪;3.统计出进入视觉范围内的物体个数,速度等;4.针对实际的监控效果,实现对算法的改进,完成复杂背景下物体跟踪问题三、实验环境PC机一台(VC++)、摄像头一个四、实验内容1.opencv相关信息:opencv是hite严开源计算机视觉库。
它由一系列c函数和少量c++类构成,实现了图像处理和计算机视觉方面的很多通用算法。
其重要重要特性包括:拥有包括300多个C函数的跨平台的中、高层API。
它不依赖于其它的外部库——尽管也可以使用某些外部库。
openCv的优势在于:(1)纯c代码,源代码开放;(2)丰富的函数功能,强大的图像和矩阵运算能力;(3)平台无关性;(4)程序运行的实时性;(5)方便灵活的用户接口;(6)交互性及强大的扩展功能;(7)可嵌入性。
可见,作为一个基本的图像处理、计算机视觉和模式识别的开源项目OpenCv可以直接应用于很多领域,作为二次开发的理想工具。
2.图像噪声的处理方面图像信号在产生、传输和记录过程中,经常会受到各种噪声的干扰,一般来说,现实中的图像都是带噪图像。
通常在图像处理工作中,在边缘检测、图像分割、特征提取、模式识别等高层次处理之前,选用适当的方法尽量地去除噪声干扰是一个非常重要的预处理步骤。
依据噪声产生的原因,将经常影响图像质量的噪声源分为三类:阻性元器件内部产生的高斯噪声;光电转换过程中的泊松噪声(椒盐噪声);感光过程中产生的颗粒噪声。
噪声的均值表明了图像中噪声的总体强度。
《OPENCV图像处理》实验报告
院(系):理学院
专业:信息与计算科学
****:***
班级: 101001班
**:***
时间: 2013年9月26日
霍夫线变换
一、实验名称:霍夫线变换
二、实验目的:
1.进一步学习opencv的一些基本操作
2.通过学习霍夫线变换,使用OpenCV的以下函数
HoughLines 和 HoughLinesP 来检测图像中的直线.
三、实验原理:
1.霍夫线变换是一种用来寻找直线的方法
2.是用霍夫线变换之前, 首先要对图像进行边缘检测的处理,也即霍夫线变换的直接输入只能是边缘二值图像.
OpenCV实现了以下两种霍夫线变换:
1.标准霍夫线变换
原理在上面的部分已经说明了. 它能给我们提供一组参数对(θ,rθ) 的集合来表示检测到的直线
在OpenCV 中通过函数 HoughLines 来实现
2.统计概率霍夫线变换
这是执行起来效率更高的霍夫线变换. 它输出检测到的直线的端点(x0,y0,x1,y1)
在OpenCV 中它通过函数 HoughLinesP 来实现.
众所周知, 一条直线在图像二维空间可由两个变量表示. 例如:
对于霍夫变换, 我们将用极坐标系来表示直线. 因此, 直线的表达式可为:
化简得:
四、实验运行环境:
Windows2007操作系统,Visual Studio2012
五、实验源代码:
pt2.y = cvRound(y0 - 1000*(a));
line( cdst, pt1, pt2, Scalar(0,0,255), 3, CV_AA);
}
#else
vector<Vec4i> lines;
HoughLinesP(dst, lines, 1, CV_PI/180, 50, 50, 10 );
for( size_t i = 0; i < lines.size(); i++ )
{
Vec4i l = lines[i];
line( cdst, Point(l[0], l[1]), Point(l[2], l[3]), Scalar(0,0,255), 3, CV_AA);
}
#endif
imshow("source", src);
imshow("detected lines", cdst);
waitKey();
return 0;
}
六、实验结果:
图表 1原图
图表 2 变换后的图
六、实验总结:
通过本次实验,我再次熟悉opencv和Visual Studio2012的环境配置,通过这几次对opencv的学习,能操作一些基本的图像显示,及其基本的图像处理,但仍有较多编程的知识学习,特别是这次霍夫线变换的算法不太理解,代码都是通过查阅资料得到,我应该加强对算法的理解,再进行编码,只有这样才能提高自己。