您的位置:首页 > 运维架构

opencv2.2+vs2008平台搭建完整过程及问题

2015-05-12 16:47 537 查看
自己看了很多up主的文章,最终自己成功搭建,给新手朋友们参考,我也是刚学。

看看其他人的:车票
http://www.cnblogs.com/freedomshe/archive/2012/04/25/2470540.html http://my.phirobot.com/blog/2014-02-opencv_configuration_in_vs.html http://www.cnblogs.com/zyx2007/archive/2011/06/25/2090197.html
调试问题http://bbs.csdn.net/topics/390121452

intelttb:
http://www.cnblogs.com/woshitianma/archive/2012/11/09/2763061.html
###vs2008配opencv2.2###可用
http://renguangmei868.blog.163.com/blog/static/3702126620101123103344478/
IplImage结构体:
http://oucmsc.blog.163.com/blog/static/12634032820130188210849/ http://blog.csdn.net/welcome_xu/article/details/7650680
常量指针”和“指向常量的指针”(const指针和指向const对象的指针) :
http://oucmsc.blog.163.com/blog/static/1263403282011102925044366/?suggestedreading&wumii
###CV播放视频:####可用(不需要的附加库不要乱加)
http://blog.csdn.net/arcsinsin/article/details/9708261
###将视频帧变成图像保存下来:###可用(开始遇到stack around the variable was corrupted是因为存放名字的数组溢出,然后图片的名字包含有路径和类型,如:“e:\\a\\image1.jpg”)

全部采集完http://blog.csdn.net/timidsmile/article/details/8283319

#include"stdafx.h"

#include <stdio.h>

#include <cv.h>

#include <highgui.h>

int main(int argc, char *argv[])

{

CvCapture* capture = cvCaptureFromAVI("C:\\me.avi");

int i = 0;

IplImage* img = 0;

char image_name[25];

cvNamedWindow( "vivi");

//读取和显示

while(1)

{

img = cvQueryFrame(capture); //获取一帧图片

if(img == NULL)

break;

cvShowImage( "vivi", img ); //将其显示

char key = cvWaitKey(20);

sprintf(image_name, "%s%d%s", "..\\tutu\\image", ++i, ".jpg");//保存的图片名

cvSaveImage( image_name, img); //保存一帧图片

}

cvReleaseCapture(&capture);

cvDestroyWindow("vivi");

return 0;

}

采集指定帧数http://blog.sina.com.cn/s/blog_6111ce890100q3i0.html

#include "stdafx.h"

#include <stdlib.h>

#include <stdio.h>

#include <math.h>

#include <cv.h>

#include <highgui.h>

#define NUM_FRAME 300 //只处理前300帧,根据视频帧数可修改

void Video_to_image(char* filename)

{

printf("------------- video to image ... ----------------n");

//初始化一个视频文件捕捉器

CvCapture* capture = cvCaptureFromAVI(filename);

//获取视频信息

cvQueryFrame(capture);

int frameH = (int) cvGetCaptureProperty(capture, CV_CAP_PROP_FRAME_HEIGHT);

int frameW = (int) cvGetCaptureProperty(capture, CV_CAP_PROP_FRAME_WIDTH);

int fps = (int) cvGetCaptureProperty(capture, CV_CAP_PROP_FPS);

int numFrames = (int) cvGetCaptureProperty(capture, CV_CAP_PROP_FRAME_COUNT);

printf("tvideo height : %dntvideo width : %dntfps : %dntframe numbers : %dn", frameH, frameW, fps, numFrames);

//定义和初始化变量

int i = 0;

IplImage* img = 0;

char image_name[13];

cvNamedWindow( "mainWin", CV_WINDOW_AUTOSIZE );

//读取和显示

while(1)

{

img = cvQueryFrame(capture); //获取一帧图片

cvShowImage( "mainWin", img ); //将其显示

char key = cvWaitKey(20);

sprintf(image_name, "%s%d%s", "e:\\a\\image", ++i, ".jpg");//保存的图片名

cvSaveImage( image_name, img); //保存一帧图片

if(i == NUM_FRAME) break;

}

cvReleaseCapture(&capture);

cvDestroyWindow("mainWin");

}

void Image_to_video()

{

int i = 0;

IplImage* img = 0;

char image_name[13];

printf("------------- image to video ... ----------------n");

//初始化视频编写器,参数根据实际视频文件修改

CvVideoWriter *writer = 0;

int isColor = 1;

int fps = 30; // or 25

int frameW = 400; // 744 for firewire cameras

int frameH = 240; // 480 for firewire cameras

writer=cvCreateVideoWriter("out.avi",CV_FOURCC('X','V','I','D'),fps,cvSize(frameW,frameH),isColor);

printf("tvideo height : %dntvideo width : %dntfps : %dn", frameH, frameW, fps);

//创建窗口

cvNamedWindow( "mainWin", CV_WINDOW_AUTOSIZE );

while(i<NUM_FRAME)

{

sprintf(image_name, "%s%d%s", "image", ++i, ".jpg");

img = cvLoadImage(image_name);

if(!img)

{

printf("Could not load image file...n");

exit(0);

}

cvShowImage("mainWin", img);

char key = cvWaitKey(20);

cvWriteFrame(writer, img);

}

cvReleaseVideoWriter(&writer);

cvDestroyWindow("mainWin");

}

int main(int argc, char *argv[])

{

char filename[13] = "1.avi";

Video_to_image(filename); //视频转图片

return 0;

}
http://hpuxtbjvip0.blog.163.com/blog/static/36741313201322191523884/
ip、cvmat、mat:

mat读写:http://blog.csdn.net/poem_qianmo/article/details/20537737

##################################################################

opencvmat读取彩色图减法,转成灰度图减法,显示并保存####可行

#include "stdafx.h"

#include <cv.h>

#include <highgui.h>

using namespace cv;

int main( int argc, char** argv )

{

/* if(argc != 2)

{

printf("useage: %s <imagefile>\n ", argv[0]);

return -1;

}

*/

char* imageName = "f:\\a\\image27.jpg";

char* imageName1 = "f:\\a\\image28.jpg";

Mat image;

image = imread( imageName);

Mat image1;

image1 = imread( imageName1);

//if( !image.data )

//{

// printf( " No image data \n " );

// return -1;

//}

Mat gray_image;//转灰度

cvtColor( image, gray_image, CV_BGR2GRAY );

Mat gray_image1;//转灰度

cvtColor( image1, gray_image1, CV_BGR2GRAY );

// int rows=gray_image.rows;//行数

// printf("%d,",rows);

Mat colorchange;//定义彩色结果

colorchange=image-image1;

imshow("clorchange",colorchange);//显示彩色结果结果

Mat gray_change;//定义灰色结果

gray_change=gray_image-gray_image1;

imshow("graychange",gray_change);//显示灰色结果

// imwrite( "f:\\bg.jpg", gray_image );

//namedWindow( imageName, CV_WINDOW_AUTOSIZE );

//namedWindow( "Gray image", CV_WINDOW_AUTOSIZE );

imshow( imageName, image );

imshow( "Gray image", gray_image );

imshow( imageName1, image1 );

imshow( "Gray image1", gray_image1 );

waitKey(0);

return 0;

}

###############################

计算灰度图像的像素点:

#include "stdafx.h"

#include <cv.h>

#include <highgui.h>

#include <iostream>

using namespace cv;

int main(int argc, const char *argv[])

{

Mat src = imread("f:\\0_1.jpg");

imshow("a",src);

int nRows = src.rows;//列

//图像数据列需要考虑通道数的影响;

int nCols = src.cols ; //行

if (src.isContinuous())//连续存储的数据,按一行处理

{

nCols *= nRows;//变成一行一维数组

nRows = 1;

}

int i,j;

uchar* p;

int des=0;

for( i = 0; i < nRows; ++i)//1行

{

p = src.ptr<uchar>(i);//c*r列

for ( j = 0; j < nCols;j++)//注意通道顺序为BGR,红色为第三个数据;

{

des+=p[j];

}

des=des/255;//每个像素点值为255

printf("剩余像素点为:%d",des);

}

waitKey();

return 0;

}

#######################################################################

直方图均衡化

#include "stdafx.h"

#include "opencv2/highgui/highgui.hpp"

#include "opencv2/imgproc/imgproc.hpp"

#include <iostream>

#include <stdio.h>

using namespace cv;

using namespace std;

/** @function main */

int main( int argc, char** argv )

{

Mat src, dst, change;

char* source_window = "Source image";

char* equalized_window = "Equalized Image";

/// 加载源图像

src = imread( "f:\\b.jpg",0);

if( !src.data )

{ cout<<"Usage: ./Histogram_Demo <path_to_image>"<<endl;

return -1;}

/// 转为灰度图

// cvtColor( src, src, CV_BGR2GRAY );

/// 应用直方图均衡化

equalizeHist( src, dst );

/// 显示结果

namedWindow( source_window, CV_WINDOW_AUTOSIZE );

namedWindow( equalized_window, CV_WINDOW_AUTOSIZE );

change= dst-src;

imshow("change",change);

imshow( source_window, src );

imshow( equalized_window, dst );

/// 等待用户按键退出程序

waitKey(0);

return 0;

}

#################################################################3

用MFC开一张图片:http://jingyan.baidu.com/album/f71d60375ddd411ab641d1e3.html?picindex=1

附加库:

opencv_core220d.lib

opencv_highgui220d.lib

opencv_calib3d220d.lib

opencv_contrib220d.lib

opencv_features2d220d.lib

opencv_flann220d.lib

opencv_gpu220d.lib

opencv_imgproc220d.lib

opencv_legacy220d.lib

opencv_ml220d.lib

opencv_objdetect220d.lib

opencv_ts220d.lib

opencv_video220d.lib
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: