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

  • 格式:pdf
  • 大小:66.18 KB
  • 文档页数:16
IplImage * pHisHorImg = cvCreateImage( cvSize(256,240), 8, 3 );//垂直宽高 pHisHorImg->origin = 1; cvZero(pHisHorImg);
IplImage * pCHisHorImg = cvCreateImage( cvSize(256,480), 8, 3 );//动态 pCHisHorImg->origin = 1;
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]); }
// int isColor = 1;
int fps
= 25; // or 30
// int frameW = 640; // 744 for firewire cameras
// int frameH = 480; // 480 for firewire cameras
#ifndef NOWRITE
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(i,0),
CV_RGB(100,255,100), 1, 8);
}
//
cvPoint(i,verPrj[i]),
// cvShowImage("HisHor",pHisHorImg); cvShowImage("HisVer",pHisVerImg);
if (SumX < MinX) { MinX = SumX; DevX = i - 160; } }
// temp = 120*nStep + j;
// verPrj[n] =
0;
// for ( i = 120 ; i < 360; i++)
// {
//
verPrj[n] += pGrayData[ temp ] ;
//
temp += nStep;
// }
// verPrj[n] /= 240;
int CurHorPrj[480] = {0}; int CurVerPrj[640] = {0}; int m , n ; int DevX, DevY;
pFrame = cvQueryFrame( pCapture ); cvWaitKey(800); pFrame = cvQueryFrame( pCapture );
for ( j = 0; j < 640 ; j++) { CurVerPrj[n] = 120; for ( i = 120 ; i < 360; i++) { CurVerPrj[n] += pGrayData[ i*nStep + j ] ; } CurVerPrj[n] /= 240; n++; }
//显示通道 IplImage * pStableImg = cvCreateImage( cvGetSize(pFrame), 8, 3 );//建立稳定后图像通道 pStableImg->origin = pFrame->origin; uchar * pStableData = (uchar *)pStableImg->imageData; int nCStep = pStableImg->widthStep/(sizeof(uchar)); cvZero(pStableImg);
}
cvLine(pCHisVerImg,
cvPoint(120,0),
cvPoint(120,255),
CV_RGB(100,255,100), 1, 8);
//相关运算绝对误差和 long MinY = 1000000000; long SumY = 0; long MinX = 1000000000;
for ( i = 0; i < 240 ; i++)
{
cvLine(pHisHorImg,
cvPoint(0,i),
CV_RGB(255,100,100), 1, 8);
}
cvPoint(horPrj[i],i),
for ( i = 0; i < 320 ; i++)
{
cvLine(pHisVerImg,
int nWidth = cvGetSize(pFrame).width; int nHeight = cvGetSize(pFrame).height; int i,j; long numFrame = 0;
//投影数组 视频处理 int horPrj[360] = {0}; int verPrj[480] = {0};
// {
// cvLine(pHisVerImg,
cvPoint(i,0),
CV_RGB(100,255,100), 1, 8);
// }
//参考帧投影
m = 0;
பைடு நூலகம்n = 0;
cvPoint(i,horPrj[i]), cvPoint(i,verPrj[i]),
for ( i = 120; i < 350; i++) { horPrj[m] = 0; for ( j = 160 ; j < 480; j++) {
cvNamedWindow("Origin"); cvNamedWindow("Stabilization"); // cvNamedWindow("HisHor"); cvNamedWindow("HisVer"); // cvNamedWindow("CHisHor"); cvNamedWindow("CHisVer");
while( pFrame = cvQueryFrame( pCapture ) ) { // cvWriteFrame(writer,pFrame); numFrame++; cvCvtColor( pFrame, pGrayImg, CV_BGR2GRAY ); cvSmooth( pGrayImg, pGrayImg, CV_MEDIAN) ;
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));
视频稳像处理代码-C 语言 opencv
#include "iostream.h" #include "cv.h" #include "cxcore.h" #include "highgui.h"
int main(int argc, char* argv[]) {
cvCvtColor( pFrame, pGrayImg, CV_BGR2GRAY ); cvSmooth( pGrayImg, pGrayImg, CV_MEDIAN) ;
//参考帧投影 // for ( i = 120; i < 360 ; i++) // { // temp = i*nStep + 160; // horPrj[m] = 0;
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++; }