64,282
社区成员
发帖
与我相关
我的任务
分享
#include <cv.h>
#include "math.h"
#include <highgui.h>
IplImage* xuanzhuanpj(IplImage* frontImg1,IplImage* leftImg1,IplImage* backImg1,IplImage* rightImg1);
int main(int argc, char* argv[])
{
CvCapture* capture = cvCaptureFromAVI("F:\\1.avi");
//cvNamedWindow("qw");
IplImage* frame;
CvVideoWriter *writer1 = 0, *writer2 = 0, *writer3 = 0, *writer4 = 0;
int iscolor = 1;
int fps = 25;
int framew = 176;
int frameh = 105;
writer1 = cvCreateVideoWriter("F:\\41.avi", CV_FOURCC('M','J','P','G'),fps,cvSize
(framew,frameh),iscolor);
writer2 = cvCreateVideoWriter("F:\\42.avi", CV_FOURCC('M','J','P','G'),fps,cvSize
(framew,frameh),iscolor);
writer3 = cvCreateVideoWriter("F:\\43.avi", CV_FOURCC('M','J','P','G'),fps,cvSize
(framew,frameh),iscolor);
writer4 = cvCreateVideoWriter("F:\\44.avi", CV_FOURCC('M','J','P','G'),fps,cvSize
(framew,frameh),iscolor);
cvQueryFrame(capture);
int numFrames = (int) cvGetCaptureProperty(capture, CV_CAP_PROP_FRAME_COUNT);
int temp = numFrames / 4;
printf("\n%d\n", numFrames);
int i;
for (i = 0;i < numFrames; i++)
{
frame = cvQueryFrame(capture);
if (i < temp)
cvWriteFrame(writer1, frame);
else
{
if (i < temp * 2)
cvWriteFrame(writer2, frame);
else
{
if (i < temp * 3)
cvWriteFrame(writer3, frame);
else
if (i < temp * 4) cvWriteFrame(writer4, frame);
}
}
//cvShowImage("qw", frame);
//char key = cvWaitKey(20);
}
CvCapture *capture1 = cvCaptureFromAVI("F:\\41.avi");
CvCapture *capture2 = cvCaptureFromAVI("F:\\42.avi");
CvCapture *capture3 = cvCaptureFromAVI("F:\\43.avi");
CvCapture *capture4 = cvCaptureFromAVI("F:\\44.avi");
IplImage *img1 = 0;
IplImage *img2 = 0;
IplImage *img3 = 0;
IplImage *img4 = 0;
IplImage *img0 = 0;
for (i = 0; i < temp; i++) ////T1 第一个循环,
{
img1 = cvQueryFrame(capture1);
img2 = cvQueryFrame(capture2);
img3 = cvQueryFrame(capture3);
img4 = cvQueryFrame(capture4);
img0 = xuanzhuanpj(img1, img2, img3, img4); //////调用这个函数正常
cvShowImage("win1",img0);
cvWaitKey(30);
}
for (i = 0; i < temp; i++) ////T2 ///////第二个循环
{
img1 = cvQueryFrame(capture2);
img2 = cvQueryFrame(capture3);
img3 = cvQueryFrame(capture4);
img4 = cvQueryFrame(capture1);
img0 = xuanzhuanpj(img1, img2, img3, img4); //////调用出错了
cvShowImage("win1",img0);
cvWaitKey(30);
}
for (i = 0; i < temp; i++) ////T3
{
img1 = cvQueryFrame(capture3);
img2 = cvQueryFrame(capture4);
img3 = cvQueryFrame(capture1);
img4 = cvQueryFrame(capture2);
img0 = xuanzhuanpj(img1, img2, img3, img4);
cvShowImage("win1",img0);
cvWaitKey(30);
}
for (i = 0; i < temp; i++) ////T4
{
img1 = cvQueryFrame(capture4);
img2 = cvQueryFrame(capture3);
img3 = cvQueryFrame(capture2);
img4 = cvQueryFrame(capture1);
img0 = xuanzhuanpj(img1, img2, img3, img4);
cvShowImage("win1",img0);
cvWaitKey(30);
}
cvReleaseVideoWriter(&writer1);
cvReleaseVideoWriter(&writer2);
cvReleaseVideoWriter(&writer3);
cvReleaseVideoWriter(&writer4);
cvReleaseCapture(&capture);
//cvDestroyWindow("qw");
cvDestroyWindow("qw");
system ("pause");
return 0;
}
// clockwise 为true则顺时针旋转,否则为逆时针旋转
IplImage* rotateImage(IplImage* src, int angle, bool clockwise)
{
int Ttemp = angle;
angle = abs(angle) % 180;
if (angle > 90)
{
angle = 90 - (angle % 90);
}
IplImage* dst = NULL;
int width =
(double)(src->height * sin(angle * CV_PI / 180.0)) +
(double)(src->width * cos(angle * CV_PI / 180.0 )) + 1;
int height =
(double)(src->height * cos(angle * CV_PI / 180.0)) +
(double)(src->width * sin(angle * CV_PI / 180.0 )) + 1;
int tempLength = sqrt((double)src->width * src->width + src->height * src->height) + 10;
int tempX = (tempLength + 1) / 2 - src->width / 2;
int tempY = (tempLength + 1) / 2 - src->height / 2;
int flag = -1;
dst = cvCreateImage(cvSize(width, height), src->depth, src->nChannels);
cvZero(dst);
IplImage* temp = cvCreateImage(cvSize(tempLength, tempLength), src->depth, src->nChannels);
cvZero(temp);
cvSetImageROI(temp, cvRect(tempX, tempY, src->width, src->height));
cvCopy(src, temp, NULL);
cvResetImageROI(temp);
if (clockwise)
flag = 1;
if (Ttemp == 180) angle = Ttemp;
float m[6];
int w = temp->width;
int h = temp->height;
m[0] = (float) cos(flag * angle * CV_PI / 180.);
m[1] = (float) sin(flag * angle * CV_PI / 180.);
m[3] = -m[1];
m[4] = m[0];
// 将旋转中心移至图像中间
m[2] = w * 0.5f;
m[5] = h * 0.5f;
//
CvMat M = cvMat(2, 3, CV_32F, m);
cvGetQuadrangleSubPix(temp, dst, &M);
cvReleaseImage(&temp);
return dst;
}
IplImage* xuanzhuanpj(IplImage* frontImg1,IplImage* leftImg1,IplImage* backImg1,IplImage* rightImg1)
{
CvSize dstSize;
dstSize.width = leftImg1->width + leftImg1->height * 2.0 + 4;
dstSize.height = frontImg1->width + frontImg1->height * 2.0 + 4;
//dstSize.width = 176 + 105 * 2.0 + 4;
//dstSize.height = 176 + 105 * 2.0 + 4;
IplImage* dstImg = cvCreateImage(dstSize, frontImg1->depth, frontImg1->nChannels);
cvZero(dstImg);
IplImage* frontImg = cvCreateImage(cvGetSize(frontImg1), frontImg1->depth, 1);
IplImage* backImg = cvCreateImage(cvGetSize(backImg1), backImg1->depth, 1);
IplImage* leftImg = cvCreateImage(cvGetSize(leftImg1), leftImg1->depth, 1);
IplImage* rightImg = cvCreateImage(cvGetSize(rightImg1), rightImg1->depth , 1);
frontImg = frontImg1;
backImg = rotateImage(backImg1, 180,0);
rightImg = rotateImage(rightImg1, 90, 0);
leftImg = rotateImage(leftImg1, 90, 1);
cvSetImageROI(dstImg, cvRect(0 ,frontImg->height + 1, leftImg->width, leftImg->height));
cvRepeat(leftImg, dstImg);
cvResetImageROI(dstImg);
cvSetImageROI(dstImg, cvRect(frontImg->height + 1, frontImg->height + frontImg->width + 2,
frontImg->width, frontImg->height));
cvCopy(frontImg, dstImg);
cvResetImageROI(dstImg);
cvSetImageROI(dstImg, cvRect(frontImg->height + 1, 0, backImg->width, backImg->height));
cvCopy(backImg, dstImg);
cvResetImageROI(dstImg);
cvSetImageROI(dstImg, cvRect(frontImg->height + frontImg->width + 2, frontImg->height + 1,
rightImg->width, rightImg->height));
cvCopy(rightImg, dstImg);
cvResetImageROI(dstImg);
//cvReleaseImage(&frontImg);
cvReleaseImage(&backImg);
cvReleaseImage(&leftImg);
cvReleaseImage(&rightImg);
// cvReleaseImage(&frontImg1);
// cvReleaseImage(&backImg1);
// cvReleaseImage(&leftImg1);
// cvReleaseImage(&rightImg1);
return dstImg;
}
IplImage* xuanzhuanpj(IplImage* frontImg1,IplImage* leftImg1,IplImage* backImg1,IplImage* rightImg1)
{
CvSize dstSize;
dstSize.width = leftImg1->width + leftImg1->height * 2.0 + 4; ////这一句出错了
dstSize.height = frontImg1->width + frontImg1->height * 2.0 + 4;
//dstSize.width = 176 + 105 * 2.0 + 4;
//dstSize.height = 176 + 105 * 2.0 + 4;
IplImage* dstImg = cvCreateImage(dstSize, frontImg1->depth, frontImg1->nChannels);
cvZero(dstImg);
IplImage* frontImg = cvCreateImage(cvGetSize(frontImg1), frontImg1->depth, 1);
IplImage* backImg = cvCreateImage(cvGetSize(backImg1), backImg1->depth, 1);
IplImage* leftImg = cvCreateImage(cvGetSize(leftImg1), leftImg1->depth, 1);
IplImage* rightImg = cvCreateImage(cvGetSize(rightImg1), rightImg1->depth , 1);
……