主要是针对自己opencv配置过程做了记录,解决了一些配置的问题。
在codeblock和VS2013上配置了opencv,并进行了摄像头程序的测试。
主要配置方式与网上其他相同
下载opencv(官网http://opencv.org/)(这里使用opencv2.4.9)解压。
简单介绍一下配置运行库,看不懂就百度吧。
主要是环境变量添加 opencv/build/x86/vc12/bin (32位,vs2013)
工程属性添加 运行库 bin (同上),include(opencv/build/include),lib目录(opencv/build/x86/vc12/lib)
然后添加依赖库,就是lib文件
然后配置完成。(codeblock基本所有都是这么配置的,include目录,bin目录,lib目录,lib文件)
balalala。。。。。
遇到的问题
1、lib目录只添加一个,动态链接用lib,静态链接用staticlib,不要同时添加,搜索会出错,网上很多都说这个,导致编译通不过,坑爹。因为这两个文件下有同名lib,搜索会出错的。
2、lib文件添加的时候注意debug和release模式分开,我似乎自动添加了,不过还是说明一下。
3、有人指出出现error runtime问题要修改release和debug中属性->c/c++->代码生成中改runtime library中的选项,不过我是第一个问题解决后,就没出现过
————————————————————————
补充说明
1、vs中读取文件的当前目录是跟cpp文件相同的,如果直接放工程文件下会出错,比如imread,imshow出问题
2、codeblock的mingw可能无法使用c++接口,只能使用c接口,因为编译器问题,而vs相应的版本对应相应的编译器。主要要是编译器与opencv版本对应,最好使用借助cmake用codeblock中的mingw去编译opencv中的source文件,这样生成的文件就完美兼容了,解决方法参见 http://blog.csdn.net/goomaple/article/details/45649305
更新内容 2016
利用cmake自己编译生成opencv3.0,基本步骤就是选取cmake的src和build文件,需要注意的是cmake选项,比如果你的编译器与cuda库不匹配(vs2015+cuda7.5不匹配),就会导致生成失败,还有python库注意一下。
之后生成生成release版本和debug版本即可,需要注意的是cmake中有一个选项叫opencv_world,选了这个就只有一个dll,现在一般推荐点上这个就不用一一引入了。
opencv3.0很强大,也可以关注一下github上opencv_contribute的内容,有一些比较有意思的开源未授权算法
最后贴一段代码,摄像头捕捉,做了一个简单的边缘提取
#include "stdafx.h"
#include <iostream>
#include <stdio.h>
#include "opencv2/opencv.hpp"
int _tmain(int argc, _TCHAR* argv[])
{
cvNamedWindow("Video", CV_WINDOW_AUTOSIZE);
cvNamedWindow("Canny", CV_WINDOW_AUTOSIZE);
CvCapture *capture = cvCreateCameraCapture(0);//摄像头,下面一个是读视频
//CvCapture *capture = cvCreateFileCapture("test.wmv");
IplImage *frame;
IplImage *frame_gray;
IplImage *frame_canny;
while (1)
{
frame = cvQueryFrame(capture);
if (!frame)continue;//这里没用,如果为break,由于摄像头初始化还没数据就跳出循环,如果做判定,建议写在前面
frame_gray = cvCreateImage(cvGetSize(frame), IPL_DEPTH_8U, 1);
frame_canny = cvCreateImage(cvGetSize(frame), IPL_DEPTH_8U, 1);
cvConvertImage(frame, frame_gray, 0);
cvCanny(frame_gray, frame_canny, 10, 100, 3);
cvShowImage("Video", frame);
cvShowImage("Canny", frame_canny);
char c = cvWaitKey(33);
if (c == 27)
{
break;
}
}
cvReleaseCapture(&capture);
cvDestroyAllWindows();
return 0;
}