getperspectivetransform是cstring在哪个头文件件中

&>&&>&&>&&>&OpenCV 中Affine/Perspective 变换矩阵 LSM扩展求法
OpenCV 中Affine/Perspective 变换矩阵 LSM扩展求法
上传大小:2KB
OpenCV 中 getAffineTransform / getPerspectiveTransform都只用到头3/4 特征点求取变换矩阵。 本函数扩展算法使用所有特征点匹配,满足最小二乘误差。
返回结果和 cv::getAffineTransform / cv::getPerspectiveTransform 一致
注意事项: double 数据类型 64位
综合评分:5(2位用户评分)
所需积分:0
下载次数:17
审核通过送C币
创建者:xamhaha
创建者:qq
创建者:wty1009
课程推荐相关知识库
上传者其他资源上传者专辑
开发技术热门标签
VIP会员动态
您因违反CSDN下载频道规则而被锁定帐户,如有疑问,请联络:!
android服务器底层网络模块的设计方法
所需积分:0
剩余积分:720
您当前C币:0
可兑换下载积分:0
兑换下载分:
兑换失败,您当前C币不够,请先充值C币
消耗C币:0
你当前的下载分为234。
OpenCV 中Affine/Perspective 变换矩阵 LSM扩展求法
会员到期时间:
剩余下载次数:
你还不是VIP会员
开通VIP会员权限,免积分下载
你下载资源过于频繁,请输入验证码
您因违反CSDN下载频道规则而被锁定帐户,如有疑问,请联络:!
若举报审核通过,可奖励20下载分
被举报人:
举报的资源分:
请选择类型
资源无法下载
资源无法使用
标题与实际内容不符
含有危害国家安全内容
含有反动色情等内容
含广告内容
版权问题,侵犯个人或公司的版权
*详细原因:1196人阅读
OpenCV(12)
编程基础(16)
C/C++(10)
opencv的概述:
推荐参考资料《opencv基础篇》和《学习Opencv》,这两本Opencv讲的知识点都不是很细,但是可以作为参考手册,真正需要看的是Opencv教程,这个在高版本的Opencv的安装好的目录下的doc文件夹目录下都有的,名字一般是opencv_tutorials。按照这里的教程一个个做下去,不懂的地方参考上面两本书和网上百度维基,你会收获很大。另外puter.Vision.Application.Programming.Cookbook这本书也很不错。对于opencv的新的C++接口的Mat讲的很好。(笔者建议要学就学最新的,跟上潮流,Iplimage貌似已经过时,因为运用不当的内存泄露)
对于高版本的Opencv安装网上有很多教程这里不再赘述。下面简要的介绍各个相关知识(肯定会有不足的地方还望各位补充):
许多人安装Opencv稀里糊涂的就安装了Cmake,但是不知道所以然。笔者记录一下Cmake的功效:
CMake是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程)。他能够输出各种各样的makefile或者project文件,能测试所支持的C++特性,类似UNIX下的automake。只是
CMake 的取名为
CmakeLists.txt。Cmake
并不直接建构出最终的软件,而是产生标准的建构档(如 Unix
的 Makefile
或 Windows Visual C++
的 projects/workspaces),然后再依一般的建构方式使用。这使得熟悉某个(IDE)的开发者可以用标准的方式建构他的软件,这种可以使用各平台的原生建构系统的能力是
CMake 和 SCons
等其他类似系统的区别之处。
cmake和vs2008
可以编译、制作、产生适配器(wrapper)、还可以用任意的顺序建构。CMake
支援 in-place
建构(二进档和在同一个目录树中)和
out-of-place 建构(二进档在别的目录里),因此可以很容易从同一个源代码目录树中建构出多个二进档。CMake
也支持静态与动态的建构。
“CMake”这个名字是“cross platform make”的缩写。虽然名字中含有“make”,但是CMake和Unix上常见的“make”系统是分开的,而且更为高阶。
CMake是为了解决美国国家医学图书馆出资的Visible Human Project专案下的Insight
Segmentation and Registration Toolkit ()软件的跨平台建构的需求而创造出来的,其设计受到了Ken
Martin开发的pcmaker所影响。pcmaker当初则是为了支援Visualization Toolkit这个的三维图形和视觉系统才出现的,今日VTK也采用了CMake。在设计CMake之时,Kitware公司的Bill
Hoffman采用了pcmaker的一些重要想法,加上更多他自己的点子,想把GNU建构系统的一些功能整合进来。CMake最初的实作是在2000年中作的,在2001年初有了急速的进展,许多改良是来自其他把CMake整合到自己的系统中的开发者,比方说,采用CMake作为建构环境的VXL社群就贡献了很多重要的功能,Brad
King为了支援CABLE和GCC-XML这套自动包装工具也加了几项功能,奇异公司的研发部门则用在内部的测试系统DART,还有一些功能是为了让VTK可以过渡到CMake和支援(“美国Los
Alamos国家实验室”&“洛斯阿拉莫斯国家实验室”)的Advanced Computing Lab的平行视觉系统ParaView而加的。
是用一种建构软件专用的特殊编程语言写的CMake。
内建C语言、C++、Fortran、Java的自动相依性分析功能。
经由CMake脚本语言支援、Qt、FLTK。
内建对Visual
Studio .NET和过去的Visual Studio版本的支援,可以产生后缀为.dsp、.sln和.的文档。
用传统的时间标签侦测档案内容的改变。
支援平行建构(在多台电脑上同时建构)
在许多操作系统上进行跨平台编译,包括Linux、POSIX相容的系统(AIX、*BSD、HP-UX、IRIX、MinGW/、)、Mac
OS X和Windows 95/98/NT/2000/XP等。
产生可以给Graphviz用的全局相依图。
已经和Dart、CTest和CPack等软件测试和释出的工具整合。
Bullet Physics Engine
KDE (starting with version 4)
The Visualization Toolkit ()
Insight Segmentation and Registration Toolkit ()
DevIL - Open Image Library
Quantum GIS
Fast Light Toolkit()
MySql 5.58版本以后
win版本安装直接运行EXE
LINUX版本的安装:
cmake-*.*.*tar.gz为下载下来的源码包
tar xvf cmake-*.*.*.tar.gz
cd cmake-*.*.*
./bootstrap
make install
如果已经安装了cmake,想要安装新版本,则:
cd cmake-*.*.*
make install
所以Cmake可用可不用,不用的话自己编译也可以看opencv的源码,但是Cmake相当于一键编译,不用自己那么麻烦了。
从opencv2.1开始,可以使用CMake来创建和管理opencv工程了。
CMake 是一个跨平台、开源的编译系统,用来控制我们的编译过程。
用cmake和opencv创建一个有main.c的工程,我们需要先创建一个CMakeLists.txt
在这个文件中,定义了编译顺序和先决条件。
步骤如下:
(1)& && &创建一个工程
PROJECT(project_name)
假设在我们的工程中,要使用到opencv库,那么,就要定义它。这里使用REQUIRED语句来定义。
FIND_PACKAGE(OpencvREQUIRED)
(2)需要定义可执行文件的名字,和依赖文件等。在我们这个实例中,只有main.c一个文件,所以,我们就简单的把工程的名字,作为可执行文件的名字。工程的名字是存储在${PROJECT_NAME}变量中的。
ADD_EXECUTABLE{${PROJECT_NAME}main.c}
(3)需要将opencv的库文件链接到程序中。链接的语句是TARGET_LINK_LIBRARIES,当然,还要写明是链接到哪个工程。代码如下:
TARGET_LINK_LIBRARIES(${PROJECT_NAME}${Opencv_LIBS})
(4)CMakeLists.txt文件写好之后,就可以开始编译我们的工程了。
其他的一些信息:
如果你想查看Opencv的版本,代码如下:
IF(${OpenCV_VERSION} VERSION_LESS 2.0.0)
MESSAGE(FATAL_ERROR“OpenCV version is not compatible : ${OpenCV_VERSION}”)
参考网址:
关于VS配置Opencv的TBB加速的,可以参考网址(需要注册新浪微博,要不图片即使点击也会看不到):
Opencv各个文件夹含义
其实最简单的方法想理解各个文件夹的含义(通用性方法)就是看每个文件夹中的readme文本,一个优秀的平台都会有良好的记录,Intel也不例外,我只是进行了相应的整合和归纳:
3rdparty文件夹
主观感觉是与第三方有关的一个文件夹,readme中介绍:
这个文件夹包含highgui模块的库和几个非常受欢迎的静态图像编解码器。
This folder contains libraries and headers of a few very popular still image codecs used by highgui module.The libraries and headers are preferably to build Win32
and Win64 versions of OpenCV.On UNIX systems all the libraries are automatically detected by configure script.In order to use these versions of libraries instead of system ones on UNIX systems you should use BUILD_&library_name& CMake flags (for example, BUILD_PNG
for the libpng library).
------------------------------------------------------------------------------------
libjpeg 8d (8.4)& -&& The Independent JPEG Group's JPEG software.
&&&&&&&&&&&&&&&&&&&&& Copyright (C) , Thomas G. Lane, Guido Vollbeding.
&&&&&&&&&&&&&&&&&&&&& See IGJ home page
&&&&&&&&&&&&&&&&&&&&& for details and links to the source code
&&&&&&&&&&&&&&&&&&&&& HAVE_JPEG preprocessor flag must be set to make highgui use libjpeg.
&&&&&&&&&&&&&&&&&&&&& On UNIX systems configure script takes care of it.
------------------------------------------------------------------------------------
libpng 1.5.12&&&& -&& Portable Network Graphics library.
&&&&&&&&&&&&&&&&&&&&& Copyright (c) -2012 Glenn Randers-Pehrson.
&&&&&&&&&&&&&&&&&&&&& See libpng home page
&&&&&&&&&&&&&&&&&&&&& for details and links to the source code
&&&&&&&&&&&&&&&&&&&&& HAVE_PNG preprocessor flag must be set to make highgui use libpng.
&&&&&&&&&&&&&&&&&&&&& On UNIX systems configure script takes care of it.
------------------------------------------------------------------------------------
libtiff 4.0.2&&&& -&& Tag Image File Format (TIFF) Software
&&&&&&&&&&&&&&&&&&&&& Copyright (c)
Sam Leffler
&&&&&&&&&&&&&&&&&&&&& Copyright (c)
Silicon Graphics, Inc.
&&&&&&&&&&&&&&&&&&&&& See libtiff home page
&&&&&&&&&&&&&&&&&&&&& for details and links to the source code
&&&&&&&&&&&&&&&&&&&&& HAVE_TIFF preprocessor flag must be set to make highgui use libtiff.
&&&&&&&&&&&&&&&&&&&&& On UNIX systems configure script takes care of it.
&&&&&&&&&&&&&&&&&&&&& In this build support for ZIP (LZ77 compression) is turned on.
------------------------------------------------------------------------------------
zlib 1.2.7&&&&&&& -&& General purpose LZ77 compression library
&&&&&&&&&&&&&&&&&&&&& Copyright (C)
Jean-loup Gailly and Mark Adler.
&&&&&&&&&&&&&&&&&&&&& See zlib home page
&&&&&&&&&&&&&&&&&&&&& for details and links to the source code
&&&&&&&&&&&&&&&&&&&&& No preprocessor definition is needed to make highgui use this library -
&&&&&&&&&&&&&&&&&&&&& it is included automatically if either libpng or libtiff are used.
------------------------------------------------------------------------------------
jasper-1.900.1&&& -&& JasPer is a collection of software
&&&&&&&&&&&&&&&&&&&&& (i.e., a library and application programs) for the coding
&&&&&&&&&&&&&&&&&&&&& and manipulation of images.& This software can handle image data in a
&&&&&&&&&&&&&&&&&&&&& variety of formats.& One such format supported by JasPer is the JPEG-2000
&&&&&&&&&&&&&&&&&&&&& format defined in ISO/IEC 15444-1.
&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&& Copyright (c)
Image Power, Inc.
&&&&&&&&&&&&&&&&&&&&& Copyright (c)
The University of British Columbia
&&&&&&&&&&&&&&&&&&&&& Copyright (c)
Michael David Adams
&&&&&&&&&&&&&&&&&&&&& The JasPer license can be found in src/libjasper.
&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&& OpenCV on Windows uses pre-built libjasper library
&&&&&&&&&&&&&&&&&&&&& (lib/libjasper*). To get the latest source code,
&&&&&&&&&&&&&&&&&&&&& please, visit the project homepage:
&&&&&&&&&&&&&&&&&&&&&
------------------------------------------------------------------------------------
openexr-1.7.1&&&& -&& OpenEXR is a high dynamic-range (HDR) image file format developed
&&&&&&&&&&&&&&&&&&&&& by Industrial Light & Magic for use in computer imaging applications.
&&&&&&&&&&&&&&&&&&&&& Copyright (c) 2006, Industrial Light & Magic, a division of Lucasfilm
&&&&&&&&&&&&&&&&&&&&& Entertainment Company Ltd. Portions contributed and copyright held by
&&&&&&&&&&&&&&&&&&&&& others as indicated. All rights reserved.
&&&&&&&&&&&&&&&&&&&&& The project homepage:
------------------------------------------------------------------------------------
ffmpeg-0.8.0&&&&& -&& FFmpeg is a complete, cross-platform solution to record,
&&&&&&&&&&&&&&&&&&&&& convert and stream audio and video. It includes libavcodec -
&&&&&&&&&&&&&&&&&&&&& the leading audio/video codec library, and also libavformat, libavutils and
&&&&&&&&&&&&&&&&&&&&& other helper libraries that are used by OpenCV (in highgui module) to
&&&&&&&&&&&&&&&&&&&&& read and write video files.
&&&&&&&&&&&&&&&&&&&&& The project homepage:
------------------------------------------------------------------------------------
android文件夹
主观感觉与android系统有关,对于VS开发影响不大不理会,这里没有readme.txt
apps文件夹
关于harr训练的一些文件
built文件夹
在配置Opencv会用到,内部还有x86和x64不同配置目录和相应的include的头文件和库文件,以及不同平台的设置VC/
data文件夹
这个文件夹包含了cv库和一些demo应用例程的大量数据
This folder contains various data that is used by cv libraries and/or demo applications.
----------------------------------------------------------------------------------------
haarcascades - the folder contains trained classifiers for detecting objects
&&&&&&&&&&&&&& of a particular type, e.g. faces (frontal, profile), pedestrians etc.
&&&&&&&&&&&&&& Some of the classifiers have a special license - please,
&&&&&&&&&&&&&& look into the files for details.
一些文档文件包括介绍、教程、图片、cv图标、.py的脚本(Python
的缩写,具有脚本语言中最丰富和强大的类库,足以支持绝大多数日常应用。在Symbina智能手机上支持C++和JAVA开发的两类程序,装上Python后,也就可以支持众多以Python开发的各种程序了。
)、java脚本之类的,其中有与上述目录中重复的文档,这是opencv归纳不好的地方。总之感觉总doc文件夹里很乱,看教程还不如去built中的doc文件夹中找。
include文件夹
与opencv基础配置相关,你会看到很多例程中利用了#include&opencv2/opencv.hpp&就是与此相关
不言而喻,苹果操作系统的平台
Assuming that your build directory is on the same level that opencv source,
From the build directory run
& ../opencv/ios/configure-device_xcode.sh
& ../opencv/ios/configure-simulator_xcode.sh
Then from the same folder invoke
xcodebuild -sdk iphoneos -configuration Release -target ALL_BUILD
xcodebuild -sdk iphoneos -configuration Release -target install install
xcodebuild -sdk iphonesimulator -configuration Release -target ALL_BUILD
xcodebuild -sdk iphonesimulator -configuration Release -target install install
modules文件夹
这里可是各类模板的聚居地。也是大部分源码的所在,如果你新接触编程,一定很诧异每次go to defination都到不了源码的所在,是因为opencv已经把源码封装成库,你每次调用的是lib与dll文件而不是这些.cpp。但是你用Cmake就可以导出源码,自行查看源码了。
例如,core文件夹下就包含了基本数据类型的定义,imgproc文件夹下包含了常用的数字图像处理函数源代码:如cvCanny()、cvSobel()。可参考网址:
.cn/s/blog_5efjed.html
samples文件夹
一些opencv自带的例子包括人脸检测、相机标定、匹配等等。
先归纳这么多,以后学习了解了再进行总结归纳。还望各位多多指出不足和错误。
另外,推荐网址:
&&相关文章推荐
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:41635次
排名:千里之外
原创:16篇
转载:24篇
评论:14条
(1)(3)(1)(3)(2)(7)(14)(1)(6)(2)46257人阅读
【图像处理】(43)
【编程语言】(40)
透视变换的原理和矩阵求解请参见前一篇。在OpenCV中也实现了透视变换的公式求解和变换函数。求解变换公式的函数:Mat getPerspectiveTransform(const Point2f src[], const Point2f dst[])输入原始图像和变换之后的图像的对应4个点,便可以得到变换矩阵。之后用求解得到的矩阵输入perspectiveTransform便可以对一组点进行变换:void perspectiveTransform(InputArray src, OutputArray dst, InputArray m)注意这里src和dst的输入并不是图像,而是图像对应的坐标。应用前一篇的例子,做个相反的变换:int main( )
Mat img=imread(&boy.png&);
int img_height = img.
int img_width = img.
vector&Point2f& corners(4);
corners[0] = Point2f(0,0);
corners[1] = Point2f(img_width-1,0);
corners[2] = Point2f(0,img_height-1);
corners[3] = Point2f(img_width-1,img_height-1);
vector&Point2f& corners_trans(4);
corners_trans[0] = Point2f(150,250);
corners_trans[1] = Point2f(771,0);
corners_trans[2] = Point2f(0,img_height-1);
corners_trans[3] = Point2f(650,img_height-1);
Mat transform = getPerspectiveTransform(corners,corners_trans);
cout&&transform&&
vector&Point2f& ponits, points_
for(int i=0;i&img_i++){
for(int j=0;j&img_j++){
ponits.push_back(Point2f(j,i));
perspectiveTransform( ponits, points_trans, transform);
Mat img_trans = Mat::zeros(img_height,img_width,CV_8UC3);
int count = 0;
for(int i=0;i&img_i++){
uchar* p = img.ptr&uchar&(i);
for(int j=0;j&img_j++){
int y = points_trans[count].y;
int x = points_trans[count].x;
uchar* t = img_trans.ptr&uchar&(y);
= p[j*3+1];
= p[j*3+2];
imwrite(&boy_trans.png&,img_trans);
}得到变换之后的图片:注意这种将原图变换到对应图像上的方式会有一些没有被填充的点,也就是右图中黑色的小点。解决这种问题一是用差值的方式,再一种比较简单就是不用原图的点变换后对应找新图的坐标,而是直接在新图上找反向变换原图的点。说起来有点绕口,具体见前一篇的代码应该就能懂啦。除了getPerspectiveTransform()函数,OpenCV还提供了findHomography()的函数,不是用点来找,而是直接用透视平面来找变换公式。这个函数在特征匹配的经典例子中有用到,也非常直观:int main( int argc, char** argv )
Mat img_object = imread( argv[1], IMREAD_GRAYSCALE );
Mat img_scene = imread( argv[2], IMREAD_GRAYSCALE );
if( !img_object.data || !img_scene.data )
{ std::cout&& & --(!) Error reading images & && std:: return -1; }
//-- Step 1: Detect the keypoints using SURF Detector
int minHessian = 400;
SurfFeatureDetector detector( minHessian );
std::vector&KeyPoint& keypoints_object, keypoints_
detector.detect( img_object, keypoints_object );
detector.detect( img_scene, keypoints_scene );
//-- Step 2: Calculate descriptors (feature vectors)
SurfDescriptorE
Mat descriptors_object, descriptors_
pute( img_object, keypoints_object, descriptors_object );
pute( img_scene, keypoints_scene, descriptors_scene );
//-- Step 3: Matching descriptor vectors using FLANN matcher
FlannBasedM
std::vector& DMatch &
matcher.match( descriptors_object, descriptors_scene, matches );
double max_dist = 0; double min_dist = 100;
//-- Quick calculation of max and min distances between keypoints
for( int i = 0; i & descriptors_object. i++ )
{ double dist = matches[i].
if( dist & min_dist ) min_dist =
if( dist & max_dist ) max_dist =
printf(&-- Max dist : %f \n&, max_dist );
printf(&-- Min dist : %f \n&, min_dist );
//-- Draw only &good& matches (i.e. whose distance is less than 3*min_dist )
std::vector& DMatch & good_
for( int i = 0; i & descriptors_object. i++ )
{ if( matches[i].distance & 3*min_dist )
{ good_matches.push_back( matches[i]); }
drawMatches( img_object, keypoints_object, img_scene, keypoints_scene,
good_matches, img_matches, Scalar::all(-1), Scalar::all(-1),
vector&char&(), DrawMatchesFlags::NOT_DRAW_SINGLE_POINTS );
//-- Localize the object from img_1 in img_2
std::vector&Point2f&
std::vector&Point2f&
for( size_t i = 0; i & good_matches.size(); i++ )
//-- Get the keypoints from the good matches
obj.push_back( keypoints_object[ good_matches[i].queryIdx ].pt );
scene.push_back( keypoints_scene[ good_matches[i].trainIdx ].pt );
Mat H = findHomography( obj, scene, RANSAC );
//-- Get the corners from the image_1 ( the object to be &detected& )
std::vector&Point2f& obj_corners(4);
obj_corners[0] = Point(0,0); obj_corners[1] = Point( img_object.cols, 0 );
obj_corners[2] = Point( img_object.cols, img_object.rows ); obj_corners[3] = Point( 0, img_object.rows );
std::vector&Point2f& scene_corners(4);
perspectiveTransform( obj_corners, scene_corners, H);
//-- Draw lines between the corners (the mapped object in the scene - image_2 )
Point2f offset( (float)img_object.cols, 0);
line( img_matches, scene_corners[0] + offset, scene_corners[1] + offset, Scalar(0, 255, 0), 4 );
line( img_matches, scene_corners[1] + offset, scene_corners[2] + offset, Scalar( 0, 255, 0), 4 );
line( img_matches, scene_corners[2] + offset, scene_corners[3] + offset, Scalar( 0, 255, 0), 4 );
line( img_matches, scene_corners[3] + offset, scene_corners[0] + offset, Scalar( 0, 255, 0), 4 );
//-- Show detected matches
imshow( &Good Matches & Object detection&, img_matches );
waitKey(0);
}代码运行效果:findHomography()函数直接通过两个平面上相匹配的特征点求出变换公式,之后代码又对原图的四个边缘点进行变换,在右图上画出对应的矩形。这个图也很好地解释了所谓透视变换的“Viewing Plane”。(转载请注明作者和出处:&未经允许请勿用于商业用途)
&&相关文章推荐
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:2832243次
积分:23740
积分:23740
排名:第246名
原创:141篇
评论:2230条
文章:20篇
阅读:264793
文章:14篇
阅读:318825
文章:19篇
阅读:275715
文章:30篇
阅读:1222712
CS小硕一枚,兴趣领域:计算机视觉、媒体分析、图像处理;认知心理学,生理心理学。
喜欢C++、Matlab、OpenCV、Qt、UML、VS、XMind等各种优秀的、提高码农生产力的工具。
我的邮箱weilan.}

我要回帖

更多关于 string在哪个头文件 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信