Mingw opencv Windows下命令行运行
1.下载opencv 2.3
http://sourceforge.net/projects/opencvlibrary/files/ 下个opencv-win版本吧 至于版本号就随意吧,我选的是2.3。 这个是那个解压包的地址:http://ncu.dl.sourceforge.net/project/opencvlibrary/opencv-win/2.3/OpenCV-2.3.0-win-superpack.exe https://github.com/Itseez/opencv 这个github也可以下载 。
2.下载Mingw
什么版本都可以http://heanet.dl.sourceforge.net/project/mingw/OldFiles/MinGW-5.0.2.exe 我是使用codeblocks 里面的MinGW来使用的。
3.移植opencv到MinGW中
mingw-env.bat里面大概就是这样的,那个F:\MinGW\vim7.4是一个编辑器来的。如果没有可以不写。
@set PATH=F:\MinGW\bin;F:\MinGW\vim7.4;
cmd
我把openCV2.3解压到C盘根目录下,把C:\OpenCV2.3\opencv\include\opencv 里面的头文件复制到..\mingw\include中
opencv\include\opencv
2011// : , cv.h
// : , cv.hpp
// : , cvaux.h
// : , cvaux.hpp
// : , cvwimage.h
// : , cxcore.h
// : , cxcore.hpp
// : , cxeigen.hpp
// : cxmisc.h
// : , highgui.h
// : , ml.h
还有C:\OpenCV2.3\build\include\opencv2目录下所有的文件夹都复制到..\mingw\include 中
build\include\opencv2
// : <DIR> .
// : <DIR> ..
// : <DIR> calib3d
// : <DIR> contrib
// : <DIR> core
// : <DIR> features2d
// : <DIR> flann
// : <DIR> gpu
// : <DIR> highgui
// : <DIR> imgproc
// : <DIR> legacy
// : <DIR> ml
// : <DIR> objdetect
// : , opencv.hpp
// : <DIR> ts
// : <DIR> video
个文件 , 字节
个目录 ,,, 可用字节
注意此时的opencv2这个目录是要有的。 目录是这样的 ..\mingw\include\opencv2 。
4.将链接库*.a移到mingw下
根据不同的平台选择 移到..\mingw\lib
C:\OpenCV2.\build\x86\mingw\lib ..
// : , libopencv_calib3d230.dll.a
// : , libopencv_contrib230.dll.a
// : , libopencv_core230.dll.a
// : , libopencv_features2d230.dll.a
// : , libopencv_flann230.dll.a
// : , libopencv_gpu230.dll.a
// : , libopencv_highgui230.dll.a
// : , libopencv_imgproc230.dll.a
// : , libopencv_legacy230.dll.a
// : , libopencv_ml230.dll.a
// : , libopencv_objdetect230.dll.a
// : , libopencv_video230.dll.a
注意如果是Window平台的话还要将bin下的移到 ..\mingw\bin 下
C:\OpenCV2.\build\x86\mingw\bin
// : , libopencv_calib3d230.dll
// : , libopencv_contrib230.dll
// : ,, libopencv_core230.dll
// : , libopencv_features2d230.dll
// : , libopencv_flann230.dll
// : , libopencv_gpu230.dll
// : ,, libopencv_highgui230.dll
// : ,, libopencv_imgproc230.dll
// : ,, libopencv_legacy230.dll
// : , libopencv_ml230.dll
// : , libopencv_objdetect230.dll
// : , libopencv_video230.dll
为什么要这样,学了linux和Windows动态静态链接库就知道了。
到这里就基本完成了配置了。
下面是一个简单的基于opencv的小程序
#include "cv.h"
#include "highgui.h"
#include <iostream> using namespace std;
using namespace cv; int main( int argc, char** argv )
{
IplImage* pImg; //声明IplImage指针
int a;
//载入图像
if( argc == && (pImg = cvLoadImage( argv[], )) != )
{
cvNamedWindow( "Image", );//创建窗口
cvShowImage( "Image", pImg );//显示图像
cvWaitKey(); //等待按键 cvDestroyWindow( "Image" );//销毁窗口
cvReleaseImage( &pImg ); //释放图像
return ;
}
return -;
}
保存为main.cpp文件 建立一个Makefile文件
如果你环境配的不准确的话可以通过-I 加头文件目录 -L 加静态链接库
main:
g++ -I C:\OpenCV2.\opencv\include\opencv -I C:\OpenCV2.\build\include -L C:\OpenCV2.\build\x86\mingw\bin main.cpp -lopencv_calib3d230 -lopencv_contrib230 -lopencv_core230 -lopencv_features2d230 -lopencv_flann230 -lopencv_gpu230 -lopencv_highgui230 -lopencv_imgproc230 -lopencv_legacy230 -lopencv_ml230 -lopencv_objdetect230 -lopencv_video230 -o main.exe
标准版
main:
g++ main.cpp -lopencv_calib3d230 -lopencv_contrib230 -lopencv_core230 -lopencv_features2d230 -lopencv_flann230 -lopencv_gpu230 -lopencv_highgui230 -lopencv_imgproc230 -lopencv_legacy230 -lopencv_ml230 -lopencv_objdetect230 -lopencv_video230 -o main.exe
我自己测试的时候那个 -L参数还是要的。具体应该是Window下gcc对链接库的映射吧,就是吧*.dll --> *.a 的原因吧。
然后make就能编译了。
这样就完成了吗?能编译不代表能执行。
我就出现几个错误
(1). make错误 可能是make的版本太低或是x64和x86的区别吧。
(2). libiconv-2.dll libintl-8.dll 文件未找到。 不用问直接下载,前面的几个网站有单个文件下载的。
(3). 最关键的错误: 无法定位程序输入点 _XXXXXXXXX 于动态链接库libstdc++-6.dll上。这个是由于编译opencv时用的C++版本和当前mingw用的C++版本不一样的错误。具体opencv的版本要看OpenCV2.3\readme.txt文件,里面有这一句"32-bit DLLs have been built using official MinGW 4.5.2" 表示要用4.5.2的版本。难道我们要下载个4.5.2一样的版本。其实也不用只要到sourceforge.net上的mingw中下个对应版本的libstdc++-6.dll文件,然后替换mingw\bin\libstdc++-6.dll
5. 感想,不知道怎么说呢,我就是对这种在命令行下编译比较感兴趣。
Mingw opencv Windows下命令行运行的更多相关文章
- windows下命令行模式中cd命令无效的原因
当我们执行cmd 想切换当前工作目录时,会发现windows下命令行模式中cd命令没有生效,到底是什么原因呢? 例如: 当我们想切换到 D:\MySql\mysql-5.7.19-winx64\bin ...
- windows下命令行利器---Cmder(安装,中文乱码,配置右键菜单)
很多人都是在win下开发的,这样就会出现,经常需要命令行操作,而win cmd命令和linux命令有很大差异,导致大家很难受,今天给大家介绍一个win下命令行的利器-Cmder 一.先看一下它的容颜 ...
- 转:windows下命令行工具
转自: http://www.cnblogs.com/haochuang/p/5593411.html Windows下CMD不好用,远没有Linux,或者一些SSH工具用起来方便.其实Windows ...
- windows 下命令行启动停止mysql
MySQL比较好玩一点就是它可以用多种方式启动,当然它也可以用多种方式关闭.下面我就mysql的几种启动方式简单的谈一谈,希望可以给大家提供一些参考. 第一种,用mysqld-nt来启动. 在没有进行 ...
- 在 Linux/windows下 命令行中使用和执行 PHP 代码[交互式php]
[注释]在ubuntu下,升级php到7.1版本,虽然提示的是Interactive mode enabled, 但实际上可以直接书写命令,和interactive shell效果一样. 一:wind ...
- windows下命令行cmder工具
windows下系统自带的命令行工具,实在是太丑了,输入命令后,有时排版乱七八糟,而且使用惯liunx系统的命令后,实在是不能够接受,这么蹩脚的工具:为此我给大家推荐一款实用的开源工具cmder 下载 ...
- go语言执行windows下命令行的方法
转自:http://www.jb51.net/article/61727.htm 在golang里执行windows下的命令行,例如在golang里面调用 del d:\a.txt 命令 packag ...
- windows下命令行设置静态IP
windows 10 预览版出现无法设置静态IP的bug,只能通过命令行进行设置,开启powershell,然后执行下列的命令即可 下面的"以太网 3" 为你设置的网卡的网卡名称, ...
- mysql在windows下命令行启动与关闭服务
一.命令行关闭与启动服务的命令: 二.运行cmd的命令行程序时,必须以管理员身份运行.否则会出现如下提示: 三.mysql5.7版本的服务名一般默认为mysql57,因此如果使用服务名mysql,那么 ...
随机推荐
- [模式识别].(希腊)西奥多里蒂斯<第四版>笔记5之__特征选取
1,引言 有关模式识别的一个主要问题是维数灾难.我们将在第7章看到维数非常easy变得非常大. 减少维数的必要性有几方面的原因.计算复杂度是一个方面.还有一个有关分类器的泛化性能. 因此,本章的主要任 ...
- 算法笔记_179:历届试题 数字游戏(Java)
目录 1 问题描述 2 解决方案 1 问题描述 问题描述 栋栋正在和同学们玩一个数字游戏. 游戏的规则是这样的:栋栋和同学们一共n个人围坐在一圈.栋栋首先说出数字1.接下来,坐在栋栋左手边的同学要 ...
- "高可用方案工具包" high availability toolkit 1.2 公布了。version 1.2 新增了 负载均衡 load balance 的技术实现
"高可用方案工具包" high availability toolkit 1.2 公布了. version 1.2 新增了 负载均衡 load balance 的技术实现. 项目 ...
- poj 4014 Dice 贪心
//poj 4014 //sep9 #include <iostream> #include <algorithm> using namespace std; int n; s ...
- [Unity-1] Unity简单介绍
Unity是一套包含图形.声音.物理等功能的游戏引擎,提供了一个强大的关卡编辑器.支持大部分主流3D软件格式,使用C#或者JavaScript等高级语言实现脚本功能.使开发人员无需了解底层复杂技术,高 ...
- Unix 网络编程 读书笔记2
第三章 套接字编程简介 每一个 Socket 都用一个半相关描述:{协议,本地地址,本地端口}一个完整的 Socket 则用一个相关描述{协议,本地地址,本地端口,远程地址,远程端口}每一个 Sock ...
- FPGA视频拼接器的DP 的4k 功能输入, 把lvds 转为 serdes
4k(3840 x 2160 @60hz)越来越成为一种视频趋势,怎样把4K 接入到拼接器中.是一个棘手的问题. 先看一下原理图的接口: 这是 anx1122的 lvds的接口. 以下看一下系统的框架 ...
- heap与stack的差
本文内容来源于<程序猿面试宝典>第三版. 在进行C/C++编程时.常常将操作的内存分下面几个类别: 栈区(stack):由编译器自己主动分配和释放,存放函数的參数值.局部变量的值等. 其操 ...
- LoadRunner内部结构
转载自:http://blog.sina.com.cn/s/blog_6da75b980100n2nv.html 英文版地址: http://www.rickyzhu.com/21_princip ...
- 在C#中判断某个类是否实现了某个接口
有时我们需要判断某个类是否实现了某个接口(Interface),比如在使用反射机制(Reflection)来查找特定类型的时候. 简单来说,可以使用Type.IsAssignableFrom方法: t ...