最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 正文

视频稳像处理代码-C语言opencv

来源:动视网 责编:小OO 时间:2025-10-03 19:58:27
文档

视频稳像处理代码-C语言opencv

#include》iostream.h》#include》cv.h》#include》cxcore.h》#include》highgui.h》intmain(intargc,char*argv[]){//输入原始视频IplImage*pFrame;CvCapture*pCapture=cvCreateFileCapture(》AAA.avi》);//读入视频流//CvCapture*pCapture=cvCaptureFromCAM(0);SampleVideoCvSizesize=cvSiz
推荐度:
导读#include》iostream.h》#include》cv.h》#include》cxcore.h》#include》highgui.h》intmain(intargc,char*argv[]){//输入原始视频IplImage*pFrame;CvCapture*pCapture=cvCreateFileCapture(》AAA.avi》);//读入视频流//CvCapture*pCapture=cvCaptureFromCAM(0);SampleVideoCvSizesize=cvSiz
#include "iostream.h"

#include "cv.h"

#include "cxcore.h"

#include "highgui.h"

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

{

//输入原始视频

IplImage * pFrame;

CvCapture * pCapture = cvCreateFileCapture( "AAA.avi" ); //读入视频流

//CvCapture * pCapture = cvCaptureFromCAM(0);SampleVideo

CvSize size = cvSize(

(int)cvGetCaptureProperty( pCapture, CV_CAP_PROP_FRAME_WIDTH),

(int)cvGetCaptureProperty( pCapture, CV_CAP_PROP_FRAME_HEIGHT)

);

//稳定处理后输出视频

//int isColor = 1;

int fps = 25; // or 30

//int frameW = 0; // 744 for firewire cameras

//int frameH = 480; // 480 for firewire cameras

#ifndef NOWRITE

CvVideoWriter* writer = cvCreateVideoWriter(

"out1AAAVideo.avi",

CV_FOURCC('M','J','P','G'),

fps,

size

);

#endif

//稳像处理过程

pFrame = cvQueryFrame( pCapture ); //第一帧

IplImage * pGrayImg = cvCreateImage( cvGetSize(pFrame), 8, 1 ); //由第一帧灰度信息 创建一个8位灰度图像

pGrayImg->origin = pFrame->origin;

uchar * pGrayData = (uchar *)pGrayImg->imageData;

int nStep = pGrayImg->widthStep/(sizeof(uchar));

//显示通道

IplImage * pStableImg = cvCreateImage( cvGetSize(pFrame), 8, 3 );//建立稳定后图像通道

pStableImg->origin = pFrame->origin;

uchar * pStableData = (uchar *)pStableImg->imageData;

int nCStep = pStableImg->widthStep/(sizeof(uchar));

cvZero(pStableImg);

IplImage * pHisHorImg = cvCreateImage( cvSize(256,240), 8, 3 );//垂直宽高

pHisHorImg->origin = 1;

cvZero(pHisHorImg);

IplImage * pCHisHorImg = cvCreateImage( cvSize(256,480), 8, 3 );//动态

pCHisHorImg->origin = 1;

cvZero(pCHisHorImg);

IplImage * pHisVerImg = cvCreateImage( cvSize(320,256), 8, 3 );

pHisVerImg->origin = 1;

cvZero(pHisVerImg);

IplImage * pCHisVerImg = cvCreateImage( cvSize(0,256), 8, 3 );

pCHisVerImg->origin = 1;

cvZero(pCHisVerImg);

cvNamedWindow("Origin");

cvNamedWindow("Stabilization");

//cvNamedWindow("HisHor");

cvNamedWindow("HisVer");

//cvNamedWindow("CHisHor");

cvNamedWindow("CHisVer");

int nWidth = cvGetSize(pFrame).width;

int nHeight = cvGetSize(pFrame).height;

int i,j;

long numFrame = 0;

//投影数组 视频处理

int horPrj[360] = {0};

int verPrj[480] = {0};

int CurHorPrj[480] = {0};

int CurVerPrj[0] = {0};

int m , n ;

int DevX, DevY;

pFrame = cvQueryFrame( pCapture );

cvWaitKey(800);

pFrame = cvQueryFrame( pCapture );

cvCvtColor( pFrame, pGrayImg, CV_BGR2GRAY );

cvSmooth( pGrayImg, pGrayImg, CV_MEDIAN) ;

//参考帧投影

// for ( i = 120; i < 360 ; i++)

// {

// temp = i*nStep + 160;

// horPrj[m] = 0;

// for ( j = 160 ; j < 480; j++)

// {

// horPrj[m] += pGrayData[ temp++ ] ;

// }

// horPrj[m] /= 320;

// m++;

// }

//

// for ( j = 160; j < 480 ; j++)

// {

// temp = 120*nStep + j;

// verPrj[n] =

0;

// for ( i = 120 ; i < 360; i++)

// {

// verPrj[n] += pGrayData[ temp ] ;

// temp += nStep;

// }

// verPrj[n] /= 240;

// n++;

// }

//

// for ( i = 0; i < 240 ; i++)

// {

// cvLine(pHisHorImg, cvPoint(i,0), cvPoint(i,horPrj[i]), CV_RGB(255,100,100), 1, 8);

// }

// for ( i = 0; i < 320 ; i++)

// {

// cvLine(pHisVerImg, cvPoint(i,0), cvPoint(i,verPrj[i]), CV_RGB(100,255,100), 1, 8);

// }

//参考帧投影

m = 0;

n = 0;

for ( i = 120; i < 350; i++)

{

horPrj[m] = 0;

for ( j = 160 ; j < 480; j++)

{

horPrj[m] += pGrayData[ i*nStep + j ] ;

}

horPrj[m] /= 320;

m++;

}

for ( j = 160; j < 480 ; j++)

{

verPrj[n] = 0;

for ( i = 120 ; i < 350; i++)

{

verPrj[n] += pGrayData[ i*nStep + j ] ;

}

verPrj[n] /= 240;

n++;

}

for ( i = 0; i < 240 ; i++)

{

cvLine(pHisHorImg, cvPoint(0,i), cvPoint(horPrj[i],i), CV_RGB(255,100,100), 1, 8);

}

for ( i = 0; i < 320 ; i++)

{

cvLine(pHisVerImg, cvPoint(i,0), cvPoint(i,verPrj[i]), CV_RGB(100,255,100), 1, 8);

}

//

// cvShowImage("HisHor",pHisHorImg);

cvShowImage("HisVer",pHisVerImg);

while( pFrame = cvQueryFrame( pCapture ) )

{

//cvWriteFrame(writer,pFrame);

numFrame++;

cvCvtColor( pFrame, pGrayImg, CV_BGR2GRAY );

cvSmooth( pGrayImg, pGrayImg, CV_MEDIAN) ;

m = 0;

n = 0;

//当前帧投影

for ( i = 0; i < 480 ; i++)

{

CurHorPrj[m] = 0;

for ( j = 120 ; j < 480; j++)

{

CurHorPrj[m] += pGrayData[ i*nStep + j ] ;

}

CurHorPrj[m] /= 320;

m++;

}

for ( j = 0; j < 0 ; j++)

{

CurVerPrj[n] = 120;

for ( i = 120 ; i < 360; i++)

{

CurVerPrj[n] += pGrayData[ i*nStep + j ] ;

}

CurVerPrj[n] /= 240;

n++;

}

for ( i = 0; i < 480 ; i++)

{

cvLine(pCHisHorImg, cvPoint(0,i), cvPoint(CurHorPrj[i],i), CV_RGB(255,100,100), 1, 8);

}

cvLine(pCHisHorImg, cvPoint(0,120), cvPoint(255,120), CV_RGB(255,100,100), 1, 8);

for ( i = 0; i < 0 ; i++)

{

cvLine(pCHisVerImg, cvPoint(i,0), cvPoint(i,CurVerPrj[i]), CV_RGB(100,255,100), 1, 8);

}

cvLine(pCHisVerImg, cvPoint(120,0), cvPoint(120,255), CV_RGB(100,255,100), 1, 8);

//相关运算绝对误差和

long MinY = 1000000000;

long SumY = 0;

long MinX = 1000000000;

long SumX = 0;

for ( i = 80; i < 220; i++)

{

SumY = 0;

for ( j = 0; j < 240; j++)

{

SumY += abs(horPrj[j] - CurHorPrj[j+i]);

}

if (SumY < MinY)

{

MinY = SumY;

DevY = i - 120;

}

}

for ( i = 80; i < 240; i++)

{

SumX = 0;

for ( j = 0; j < 320; j++)

{

SumX += abs(verPrj[j] - CurVerPrj[j+i]);

}

if (SumX < MinX)

{

MinX = SumX;

DevX = i - 160;

}

}

cout<<"Y "<<DevY<<" X "<<DevX<<endl;

//运动补偿区域 写处理后视频大小有关

稳定内存相关

/* */

for ( i =70; i < 360 ; i++)

{

for ( j =100; j < 550; j++)

{

pStableData[i*nCStep + 3*j] = pFrame->imageData[(i+DevY)*nCStep + 3*(j+DevX)] ;

pStableData[i*nCStep + 3*j + 1] = pFrame->imageData[(i+DevY)*nCStep + 3*(j+DevX) + 1] ;

pStableData[i*nCStep + 3*j + 2] = pFrame->imageData[(i+DevY)*nCStep + 3*(j+DevX) + 2] ;

}

}

cvRectangle(pFrame, cvPoint(80, 60), cvPoint(nWidth-130, nHeight-110), CV_RGB(0,255,100), 1, 8);

//cvLine(pFrame, cvPoint(60,20), cvPoint(260,20), CV_RGB(255,0,0), 1, 8);

//窗体显示

cvSetImageROI(pFrame, cvRect(80,30,480,350));

cvSetImageROI(pStableImg, cvRect(80,60,480,320));

cvShowImage("Origin",pFrame);

cvShowImage("Stabilization",pStableImg);

cvResetImageROI(pFrame);

// cvShowImage("CHisHor",pCHisHorImg);

cvShowImage("CHisVer",pCHisVerImg);

cvZero(pCHisHorImg);

cvZero(pCHisVerImg);

//writer=cvCreateVideoWriter("out.avi",CV_FOURCC('P','I','M','1'),

// fps,cvSize(frameW,frameH),isColor);

//cvGrabFrame(capture); // capture a frame

//img=cvRetrieveFrame(capture); // retrieve the captured frame

//写视频

cvWriteToAVI( writer, pStableImg ); // add the frame to the file

char c = cvWaitKey(80);

if( c == 30 )

break;

}

//cvReleaseVideoWriter(&writer);

cvReleaseCapture( &pCapture );

cvReleaseVideoWriter( &writer );

cvDestroyAllWindows();

return 0;

}

文档

视频稳像处理代码-C语言opencv

#include》iostream.h》#include》cv.h》#include》cxcore.h》#include》highgui.h》intmain(intargc,char*argv[]){//输入原始视频IplImage*pFrame;CvCapture*pCapture=cvCreateFileCapture(》AAA.avi》);//读入视频流//CvCapture*pCapture=cvCaptureFromCAM(0);SampleVideoCvSizesize=cvSiz
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top