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

来源:互联网 发布:传奇网页版源码 编辑:程序博客网 时间:2024/04/28 03:18

自己看了很多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
0 0
原创粉丝点击