自己看了很多up主的文章,最终自己成功搭建,给新手朋友们参考,我也是刚学。
看看其他人的:车票
http://www.cnblogs.com/freedomshe/archive/2012/04/25/2470540.html
http://my.phirobot.com/blog/2014-02-opencv_configuration_in_vs.htmlhttp://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