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下命令行运行的更多相关文章

  1. windows下命令行模式中cd命令无效的原因

    当我们执行cmd 想切换当前工作目录时,会发现windows下命令行模式中cd命令没有生效,到底是什么原因呢? 例如: 当我们想切换到 D:\MySql\mysql-5.7.19-winx64\bin ...

  2. windows下命令行利器---Cmder(安装,中文乱码,配置右键菜单)

    很多人都是在win下开发的,这样就会出现,经常需要命令行操作,而win cmd命令和linux命令有很大差异,导致大家很难受,今天给大家介绍一个win下命令行的利器-Cmder 一.先看一下它的容颜 ...

  3. 转:windows下命令行工具

    转自: http://www.cnblogs.com/haochuang/p/5593411.html Windows下CMD不好用,远没有Linux,或者一些SSH工具用起来方便.其实Windows ...

  4. windows 下命令行启动停止mysql

    MySQL比较好玩一点就是它可以用多种方式启动,当然它也可以用多种方式关闭.下面我就mysql的几种启动方式简单的谈一谈,希望可以给大家提供一些参考. 第一种,用mysqld-nt来启动. 在没有进行 ...

  5. 在 Linux/windows下 命令行中使用和执行 PHP 代码[交互式php]

    [注释]在ubuntu下,升级php到7.1版本,虽然提示的是Interactive mode enabled, 但实际上可以直接书写命令,和interactive shell效果一样. 一:wind ...

  6. windows下命令行cmder工具

    windows下系统自带的命令行工具,实在是太丑了,输入命令后,有时排版乱七八糟,而且使用惯liunx系统的命令后,实在是不能够接受,这么蹩脚的工具:为此我给大家推荐一款实用的开源工具cmder 下载 ...

  7. go语言执行windows下命令行的方法

    转自:http://www.jb51.net/article/61727.htm 在golang里执行windows下的命令行,例如在golang里面调用 del d:\a.txt 命令 packag ...

  8. windows下命令行设置静态IP

    windows 10 预览版出现无法设置静态IP的bug,只能通过命令行进行设置,开启powershell,然后执行下列的命令即可 下面的"以太网 3" 为你设置的网卡的网卡名称, ...

  9. mysql在windows下命令行启动与关闭服务

    一.命令行关闭与启动服务的命令: 二.运行cmd的命令行程序时,必须以管理员身份运行.否则会出现如下提示: 三.mysql5.7版本的服务名一般默认为mysql57,因此如果使用服务名mysql,那么 ...

随机推荐

  1. [模式识别].(希腊)西奥多里蒂斯&lt;第四版&gt;笔记5之__特征选取

    1,引言 有关模式识别的一个主要问题是维数灾难.我们将在第7章看到维数非常easy变得非常大. 减少维数的必要性有几方面的原因.计算复杂度是一个方面.还有一个有关分类器的泛化性能. 因此,本章的主要任 ...

  2. 算法笔记_179:历届试题 数字游戏(Java)

    目录 1 问题描述 2 解决方案   1 问题描述 问题描述 栋栋正在和同学们玩一个数字游戏. 游戏的规则是这样的:栋栋和同学们一共n个人围坐在一圈.栋栋首先说出数字1.接下来,坐在栋栋左手边的同学要 ...

  3. &quot;高可用方案工具包&quot; high availability toolkit 1.2 公布了。version 1.2 新增了 负载均衡 load balance 的技术实现

    "高可用方案工具包"  high availability toolkit 1.2 公布了. version 1.2 新增了 负载均衡 load balance 的技术实现. 项目 ...

  4. poj 4014 Dice 贪心

    //poj 4014 //sep9 #include <iostream> #include <algorithm> using namespace std; int n; s ...

  5. [Unity-1] Unity简单介绍

    Unity是一套包含图形.声音.物理等功能的游戏引擎,提供了一个强大的关卡编辑器.支持大部分主流3D软件格式,使用C#或者JavaScript等高级语言实现脚本功能.使开发人员无需了解底层复杂技术,高 ...

  6. Unix 网络编程 读书笔记2

    第三章 套接字编程简介 每一个 Socket 都用一个半相关描述:{协议,本地地址,本地端口}一个完整的 Socket 则用一个相关描述{协议,本地地址,本地端口,远程地址,远程端口}每一个 Sock ...

  7. FPGA视频拼接器的DP 的4k 功能输入, 把lvds 转为 serdes

    4k(3840 x 2160 @60hz)越来越成为一种视频趋势,怎样把4K 接入到拼接器中.是一个棘手的问题. 先看一下原理图的接口: 这是 anx1122的 lvds的接口. 以下看一下系统的框架 ...

  8. heap与stack的差

    本文内容来源于<程序猿面试宝典>第三版. 在进行C/C++编程时.常常将操作的内存分下面几个类别: 栈区(stack):由编译器自己主动分配和释放,存放函数的參数值.局部变量的值等. 其操 ...

  9. LoadRunner内部结构

    转载自:http://blog.sina.com.cn/s/blog_6da75b980100n2nv.html   英文版地址: http://www.rickyzhu.com/21_princip ...

  10. 在C#中判断某个类是否实现了某个接口

    有时我们需要判断某个类是否实现了某个接口(Interface),比如在使用反射机制(Reflection)来查找特定类型的时候. 简单来说,可以使用Type.IsAssignableFrom方法: t ...