`
zhaohaolin
  • 浏览: 1010947 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

OpenCV 第四章习题 部分答案

 
阅读更多

1.

#include <cv.h>
#include <highgui.h>

int main(int argc, char **argv)
{
 cvNamedWindow("dst", 1);

 CvCapture * capture = cvCreateFileCapture("video2.avi");
 cvSetCaptureProperty(capture, CV_CAP_PROP_POS_FRAMES, 40);

 int frames = (int)cvGetCaptureProperty(capture, CV_CAP_PROP_FRAME_COUNT);
 printf("%d\n", frames);

 IplImage *frame = NULL;
 frame = cvQueryFrame(capture);


 int width = (int)cvGetCaptureProperty(capture, CV_CAP_PROP_FRAME_WIDTH);
 int height = (int)cvGetCaptureProperty(capture, CV_CAP_PROP_FRAME_HEIGHT);

 IplImage *gray = cvCreateImage(cvSize(width, height), IPL_DEPTH_8U, 1);
 IplImage *imggray = cvCreateImage(cvSize(width, height), IPL_DEPTH_8U, 3);
 IplImage *canny = cvCreateImage(cvSize(width, height), IPL_DEPTH_8U, 1);
 IplImage *imgcanny = cvCreateImage(cvSize(width, height), IPL_DEPTH_8U, 3);

 IplImage *dst = cvCreateImage(cvSize(width*3, height), frame->depth,frame->nChannels);
 cvZero(dst);

 IplImage *img1 = cvCreateImageHeader(cvSize(width, height), frame->depth, 3);
 IplImage *img2 = cvCreateImageHeader(cvSize(width, height), frame->depth, 3);
 IplImage *img3 = cvCreateImageHeader(cvSize(width, height), frame->depth, 3);


 //设置图像头属性值

 img1->origin = frame->origin;
 img1->depth = frame->depth;
 img1->nChannels = 3;
 /* img1->widthStep = frame->widthStep;*/

 img2->origin = frame->origin;
 img2->depth = frame->depth;
 img2->nChannels = 3;
 /* img2->widthStep = frame->widthStep;*/

 img3->origin = frame->origin;
 img3->depth = frame->depth;
 img3->nChannels = 3;
 img1->widthStep = img2->widthStep = img3->widthStep = dst->widthStep;


 while (1)
 { 
  frame = cvQueryFrame(capture);
  if (!frame)
   return 1;

  cvCvtColor(frame, gray, CV_RGB2GRAY);  // CV_RGB2GRAY
  cvCvtColor(gray, imggray, CV_GRAY2BGR);
  //cvConvertImage(frame, gray);

  cvCanny( gray, canny, 50, 79);
  cvCvtColor(canny, imgcanny, CV_GRAY2BGR);


  //确定ImageData位置
  img3->imageData = dst->imageData ; 
  cvCopy(frame,img3);
  img1->imageData = dst->imageData + frame->widthStep;
  cvCopy(imggray, img1); 
  img2->imageData = dst->imageData + frame->widthStep*2;
  cvCopy(imgcanny, img2);

  //文字标签
  CvFont textfont = cvFont(10.0,1);
  cvInitFont(&textfont, CV_FONT_HERSHEY_SIMPLEX, 0.5f, 0.5f, 0, 1);
  cvPutText(dst, "Source Image", cvPoint(10,20), &textfont, cvScalar(0,0,255));
  cvPutText(dst, "Gray Image", cvPoint(width+10,20), &textfont, cvScalar(255,0,0));
  cvPutText(dst, "Canny Image", cvPoint(width*2+10, 20), &textfont, cvScalar(0,255,0));


  cvShowImage("dst", dst);
  if (cvWaitKey(23) == 27)
   return 0;
 }

 

 cvReleaseImage(&gray);
 cvReleaseImage(&imggray);
 cvReleaseImage(&canny);
 cvReleaseImage(&imgcanny);
 cvReleaseImage(&dst);
 cvReleaseImage(&img1);
 cvReleaseImage(&img2);
 cvReleaseImage(&img3);
 cvDestroyWindow("dst");

 return 0;
}

 

2.

第二题第一小题

#include "stdio.h"
#include "cv.h"
#include "highgui.h"

//Define our callback which we will install for mouse events
void my_mouse_callback(int event, int x, int y, int flags, void *param);

CvPoint point;
bool drawing_text = false;
CvFont textfont = cvFont(5.0, 1);
char *s = (char*)malloc(50*sizeof(char*));


int main(int argc, char **argv)
{
 IplImage *img = cvLoadImage("Lena.jpg", 1);

 cvNamedWindow("Image", 1);


 IplImage *temp = cvCloneImage(img);


 cvSetMouseCallback("Image", my_mouse_callback, (void *)img);

 while (1)
 {
  cvCopyImage(img, temp);
  if (drawing_text)
   cvPutText(temp,s,point,&textfont,cvScalar(0,0,255));

  cvShowImage("Image", temp);

  if (cvWaitKey(15) == 27)
   break;

 }

 cvDestroyWindow("Image");
 cvReleaseImage(&img);
 cvReleaseImage(&temp);

 return 0;
}


void my_mouse_callback(int event, int x, int y, int flags, void *param)
{
 IplImage *img = (IplImage *) param;

 switch(event)
 {
 case CV_EVENT_MOUSEMOVE:
  {
  }
  break;
 case CV_EVENT_LBUTTONDOWN:
  {
   drawing_text = true;

   CvScalar p;
   p = cvGet2D(img, y, x);
   double b = p.val[0];
   double g = p.val[1];
   double r = p.val[2];


   memset(s,0,50);
   sprintf(s,"B:%.0f G:%.0f R:%.0f",b,g,r);

   printf("B:%.0f G:%.0f R:%.0f\n",b,g,r);
 
   point = cvPoint(x,y);

   cvInitFont(&textfont, CV_FONT_HERSHEY_SIMPLEX, 0.5f, 0.5f, 0, 1);
  }
  break;
 case CV_EVENT_LBUTTONUP:
  {
   drawing_text = false;
  } 
  break;
 }

}

2.a.

#include <cv.h>
#include <highgui.h>

//Define our callback which we will install for mouse events
void my_mouse_callback(int event, int x, int y, int flags, void *param);

CvPoint point;
bool drawing_text = false;
CvFont textfont = cvFont(5.0, 1);
char *s = (char*)malloc(50*sizeof(char*));

int main(int argc, char **argv)
{
 cvNamedWindow("dst", 1);

 CvCapture * capture = cvCreateFileCapture("video2.avi");
 cvSetCaptureProperty(capture, CV_CAP_PROP_POS_FRAMES, 40);

 int frames = (int)cvGetCaptureProperty(capture, CV_CAP_PROP_FRAME_COUNT);
 printf("%d\n", frames);

 IplImage *frame = NULL;
 frame = cvQueryFrame(capture);


 int width = (int)cvGetCaptureProperty(capture, CV_CAP_PROP_FRAME_WIDTH);
 int height = (int)cvGetCaptureProperty(capture, CV_CAP_PROP_FRAME_HEIGHT);

 IplImage *gray = cvCreateImage(cvSize(width, height), IPL_DEPTH_8U, 1);
 IplImage *imggray = cvCreateImage(cvSize(width, height), IPL_DEPTH_8U, 3);
 IplImage *canny = cvCreateImage(cvSize(width, height), IPL_DEPTH_8U, 1);
 IplImage *imgcanny = cvCreateImage(cvSize(width, height), IPL_DEPTH_8U, 3);

 IplImage *dst = cvCreateImage(cvSize(width*3, height), frame->depth,frame->nChannels);
 cvZero(dst);

 IplImage *temp = cvCloneImage(dst);

 cvSetMouseCallback("dst", my_mouse_callback, (void *)dst);


 IplImage *img1 = cvCreateImageHeader(cvSize(width, height), frame->depth, 3);
 IplImage *img2 = cvCreateImageHeader(cvSize(width, height), frame->depth, 3);
 IplImage *img3 = cvCreateImageHeader(cvSize(width, height), frame->depth, 3);


 //设置图像头属性值

 img1->origin = frame->origin;
 img1->depth = frame->depth;
 img1->nChannels = 3;
 /* img1->widthStep = frame->widthStep;*/

 img2->origin = frame->origin;
 img2->depth = frame->depth;
 img2->nChannels = 3;
 /* img2->widthStep = frame->widthStep;*/

 img3->origin = frame->origin;
 img3->depth = frame->depth;
 img3->nChannels = 3;
 img1->widthStep = img2->widthStep = img3->widthStep = dst->widthStep;


 while (1)
 { 
  frame = cvQueryFrame(capture);
  if (!frame)
   return 1;

  cvCvtColor(frame, gray, CV_RGB2GRAY);  // CV_RGB2GRAY
  cvCvtColor(gray, imggray, CV_GRAY2BGR);
  //cvConvertImage(frame, gray);

  cvCanny( gray, canny, 50, 79);
  cvCvtColor(canny, imgcanny, CV_GRAY2BGR);


  //确定ImageData位置
  img3->imageData = dst->imageData ; 
  cvCopy(frame,img3);
  img1->imageData = dst->imageData + frame->widthStep;
  cvCopy(imggray, img1); 
  img2->imageData = dst->imageData + frame->widthStep*2;
  cvCopy(imgcanny, img2);

  //文字标签
  CvFont textfont = cvFont(10.0,1);
  cvInitFont(&textfont, CV_FONT_HERSHEY_SIMPLEX, 0.5f, 0.5f, 0, 1);
  cvPutText(dst, "Source Image", cvPoint(10,20), &textfont, cvScalar(0,0,255));
  cvPutText(dst, "Gray Image", cvPoint(width+10,20), &textfont, cvScalar(255,0,0));
  cvPutText(dst, "Canny Image", cvPoint(width*2+10, 20), &textfont, cvScalar(0,255,0));

  cvCopyImage(dst, temp);
  
  if (drawing_text)
   cvPutText(temp,s,point,&textfont,cvScalar(0,255,0));


  cvShowImage("dst", temp);

  if (cvWaitKey(25) == 27)
   return 0;
 }


 cvReleaseImage(&temp);
 cvReleaseImage(&gray);
 cvReleaseImage(&imggray);
 cvReleaseImage(&canny);
 cvReleaseImage(&imgcanny);
 cvReleaseImage(&dst);
 cvReleaseImage(&img1);
 cvReleaseImage(&img2);
 cvReleaseImage(&img3);
 cvDestroyWindow("dst");

 return 0;
}


void my_mouse_callback(int event, int x, int y, int flags, void *param)
{
 IplImage *img = (IplImage *) param;

 switch(event)
 {
 case CV_EVENT_MOUSEMOVE:
  {
  }
  break;
 case CV_EVENT_LBUTTONDOWN:
  {
   drawing_text = true;

   CvScalar p;
   p = cvGet2D(img, y, x);
   double b = p.val[0];
   double g = p.val[1];
   double r = p.val[2];


   memset(s,0,50);
   sprintf(s,"B:%.0f G:%.0f R:%.0f",b,g,r);

   printf("B:%.0f G:%.0f R:%.0f\n",b,g,r);

   point = cvPoint(x,y);

   cvInitFont(&textfont, CV_FONT_HERSHEY_SIMPLEX, 0.5f, 0.5f, 0, 1);
  }
  break;
 case CV_EVENT_LBUTTONUP:
  {
   drawing_text = false;
  } 
  break;
 }

}

 

3.a.

#include "stdio.h"
#include "cv.h"
#include "highgui.h"

//Define our callback which we will install for mouse events
void my_mouse_callback(int event, int x, int y, int flags, void *param);

CvRect box;
bool drawing_box = false;

//A litte subroutine to draw a box onto an image

void draw_box(IplImage *img, CvRect rect)
{
 cvRectangle(img, cvPoint(box.x, box.y), cvPoint(box.x+box.width, box.y+box.height), cvScalar(0x00, 0xff, 0x00) /*green*/);   //BGR
}

int main(int argc, char **argv)
{
 IplImage *img = cvLoadImage("Lena.jpg", 1);

 cvNamedWindow("Image", 1);


 IplImage *temp = cvCloneImage(img);


 cvSetMouseCallback("Image", my_mouse_callback, (void *)img);

 while (1)
 {
  cvCopyImage(img, temp);
  if (drawing_box)
   draw_box(temp, box);

  cvShowImage("Image", temp);

  if (cvWaitKey(15) == 27)
   break;

 }
 cvDestroyWindow("Image");

 return 0;
}


void my_mouse_callback(int event, int x, int y, int flags, void *param)
{
 IplImage *image = (IplImage *) param;

 switch(event)
 {
 case CV_EVENT_MOUSEMOVE:
  {
   if (drawing_box)
   {
    box.width = x - box.x;
    box.height = y-box.y;
   }
  }
  break;
 case CV_EVENT_LBUTTONDOWN:
  {
   drawing_box = true;
   box = cvRect(x, y, 0, 0);
  }
  break;
 case CV_EVENT_LBUTTONUP:
  {
   drawing_box = false;
   if (box.width < 0)
   {
    box.x += box.width;
    box.width *= -1;
   }
   if (box.height < 0)
   {
    box.y += box.height;
    box.height *= -1;
   }
  } 
  break;
 }

}

 

4. 步长问题没有解决,没有找到相关函数,可能是再加一个鼠标或键盘单击事件,每次点击往前递增10帧? 先把初始源码贴出来,有时间再改。

#include "cv.h"
#include "highgui.h"

CvCapture *capture;

void slider_callback(int position)
{
 //int pos = cvGetTrackbarPos("slider", "Image");
 cvSetCaptureProperty(capture, CV_CAP_PROP_POS_FRAMES, position);
}

int main(int argc, char **argv)
{
 capture = cvCreateFileCapture("video2.avi");
 
 cvNamedWindow("Image", 1);

 int frames = (int)cvGetCaptureProperty(capture, CV_CAP_PROP_FRAME_COUNT);
 printf("%d\n", frames);

 IplImage *frame = NULL;
 frame = cvQueryFrame(capture);

 int width = (int)cvGetCaptureProperty(capture, CV_CAP_PROP_FRAME_WIDTH);
 int height = (int)cvGetCaptureProperty(capture, CV_CAP_PROP_FRAME_HEIGHT);
 
 cvCreateTrackbar("slider", "Image", NULL, frames, slider_callback);
 //cvSetTra

 while (1)
 {
  frame = cvQueryFrame(capture);
  if (!frame)
   return 1;

  cvShowImage("Image", frame);
  int pos = (int)cvGetCaptureProperty(capture, CV_CAP_PROP_POS_FRAMES);
  printf("%d\n", pos);
  //cvSetTrackbarPos("slider","Image",pos);
  if (cvWaitKey(25) == 27)
   return 0;
 }

 cvReleaseImage(&frame);
 cvDestroyWindow("Image");


 return 0;
}

 

7. 透视变换,网上别人写的,蛮不错,贴出来大家一起学习

//透视变换
/*
这个程序的运行效果,是比较容易分析的,就是变换一张图片的四个角的位置后,引起图像的相应变化,
而每个角就是二维平面的一个点具有x和y属性,4个点的x,y间接保存到df1到df8变量中。
注意cvCloneImage函数和cvCopyImage函数的区别,前来可用来分配内存,后者不负责内存分配,只负责值的传递。
这个代码不包含图像的放大、缩小、旋转功能,不过如果愿意的话,完全可以用例子中的函数自己写这些功能,
因为放大、缩小、旋转图像不过是任意变换图像四个角的特例。
*/


#include <cv.h>
#include <highgui.h>
#include <math.h>

int main(int argc,char** argv)
{
 CvPoint2D32f srcQuad[4],dstQuad[4];
 CvMat* warp_matrix = cvCreateMat(3,3,CV_32FC1);
 IplImage *src,*dst;
 src=cvLoadImage("Lena.jpg",1);
 if(!src)
  return -1;
 cvNamedWindow("Perspective_warp",1);
 int pressKey;
 int df1(1),df2(1),df3(1),df4(1),df5(1),df6(1),df7(1),df8(1);
 df1 = 5;df2 = 33;df3 = 90;df4 = 25;df5 = 20;df6 = 70;df7 = 80;df8 = 90;
 //df1 = df2 = df3 = df4 = df5 = df6 = df7 = df8 = 0;
 dst = cvCloneImage(src);
 dst->origin = src->origin;
 cvZero(dst);

 srcQuad[0].x = 0;
 srcQuad[0].y = 0;
 srcQuad[1].x = src->width - 1;
 srcQuad[1].y = 0;
 srcQuad[2].x = 0;
 srcQuad[2].y = src->height - 1;
 srcQuad[3].x = src->width - 1;
 srcQuad[3].y = src->height - 1;
 float delta=0.01;
 while(1)
 {
  //dstQuad[0].x = src->width*delta*(df1%101);
  //dstQuad[0].y = src->height*delta*(df2%101);
  //dstQuad[1].x = src->width - 1+src->width*delta*(df3%101);
  //dstQuad[1].y = src->height*delta*(df4%101);
  //dstQuad[2].x = src->width*delta*(df5%101);
  //dstQuad[2].y = src->height - 1+src->height*delta*(df6%101);
  //dstQuad[3].x = src->width - 1+src->width*delta*(df7%101);
  //dstQuad[3].y = src->height - 1+src->height*delta*(df8%101);

  dstQuad[0].x = src->width*delta*abs(df1%101);
  dstQuad[0].y = src->height*delta*abs(df2%101);
  dstQuad[1].x = src->width*delta*abs(df3%101);
  dstQuad[1].y = src->height*delta*abs(df4%101);
  dstQuad[2].x = src->width*delta*abs(df5%101);
  dstQuad[2].y = src->height*delta*abs(df6%101);
  dstQuad[3].x = src->width*delta*abs(df7%101);
  dstQuad[3].y = src->height*delta*abs(df8%101);

  cvGetPerspectiveTransform(srcQuad,dstQuad,warp_matrix);
  cvWarpPerspective(src,dst,warp_matrix);
  //--------------------------字符显示-----------------------------------------
  CvFont font = cvFont(1,1);
  char buf[8];
  char dspStr1[32] = {'\0'}; //
  char dspStr2[32] = {'\0'}; //
  char dspStr3[32] = {'\0'}; //

  memset(buf,'\0',sizeof(buf));
  strcat(dspStr1,"|");
  strcat(dspStr1,itoa(abs(df6%101),buf,10));
  strcat(dspStr1,",");
  strcat(dspStr1,itoa(abs(df7%101),buf,10));
  strcat(dspStr1,",");
  strcat(dspStr1,itoa(abs(df8%101),buf,10));
  strcat(dspStr1,"|");

  strcat(dspStr2,"|");
  strcat(dspStr2,itoa(abs(df4%101),buf,10));
  strcat(dspStr2,",00,");
  strcat(dspStr2,itoa(abs(df5%101),buf,10));
  strcat(dspStr2,"|");
  //「」┌└┘┐|
  strcat(dspStr3,"|");
  strcat(dspStr3,itoa(abs(df1%101),buf,10));
  strcat(dspStr3,",");
  strcat(dspStr3,itoa(abs(df2%101),buf,10));
  strcat(dspStr3,",");
  strcat(dspStr3,itoa(abs(df3%101),buf,10));
  strcat(dspStr3,"|");

  cvPutText(dst,dspStr1,cvPoint(dst->width-120,20),&font,cvScalar(0,0xff));
  cvPutText(dst,dspStr2,cvPoint(dst->width-120,40),&font,cvScalar(0,0xff));
  cvPutText(dst,dspStr3,cvPoint(dst->width-120,60),&font,cvScalar(0,0xff));
  //-------------------------------------------------------------------
  cvShowImage("Perspective_warp",dst);
  pressKey = cvWaitKey();
  printf("%x pressed\n",pressKey);
  switch(pressKey)
  {
  case '1':
   df1++;
   break;
  case 0x230000:
   df1--;
   break;
  case '2':
   df2++;
   break;
  case 0x280000:
   df2--;
   break;
  case '3':
   df3++;
   break;
  case 0x220000:
   df3--;
   break;
  case '4':
   df4++;
   break;
  case 0x250000:
   df4--;
   break;
  case '6':
   df5++;
   break;
  case 0x270000:
   df5--;
   break;
  case '7':
   df6++;
   break;
  case 0x240000:
   df6--;
   break;
  case '8':
   df7++;
   break;
  case 0x260000:
   df7--;
   break;
  case '9':
   df8++;
   break;
  case 0x210000:
   df8--;
   break;
  case 27:
   cvReleaseImage(&dst);
   cvDestroyWindow("Perspective_warp");
   cvReleaseMat(&warp_matrix);
   return 0;
  default:break;
  }
 }
 return 0;
}

反射变换

//仿射变换
#include <cv.h>
#include <highgui.h>
/*
这个程序中加入图片的放大、缩小、旋转功能,另外仿射变换也是透视变换的一个特例,
因为仿射变换过程中图像始终是平行四边形的。所以要确定仿射变换的目标图像,
只需要三个点的坐标,因为三个点可以确定一个平行四边形,比透视变换少一个点的坐标。
*/


int main(int argc,char** argv)
{
 CvPoint2D32f srcTri[3],dstTri[3];
 CvMat* rot_mat = cvCreateMat(2,3,CV_32FC1);
 CvMat* warp_mat = cvCreateMat(2,3,CV_32FC1);
 IplImage *src,*dst, *srcBak;
 //int df1(0),df2(33),df3(85),df4(25),df5(15),df6(70);
 int df1(0),df2(0),df3(0),df4(0),df5(0),df6(0);
 double angle(-50.0),scale(0.6);
 float delta = 0.01;
 int pressKey;

 if(!(src=cvLoadImage("Lena.jpg",1)) )
 {
  return -1;
 }
 srcTri[0].x = 0;
 srcTri[0].y = 0;
 srcTri[1].x = src->width-1;
 srcTri[1].y = 0;
 srcTri[2].x = 0;
 srcTri[2].y = src->height-1;
 dst = cvCloneImage(src);
 srcBak = cvCloneImage(src);
 cvCopy(src,srcBak);
 dst->origin = src->origin;
 cvZero(dst);
 cvNamedWindow("at",1);
 CvFont font = cvFont(1,1);

 while(1)
 {
  dstTri[0].x = srcBak->width*delta*(df1%101);
  dstTri[0].y = srcBak->height*delta*(df2%101);
  dstTri[1].x = src->width-1 + srcBak->width*delta*(df3%101);
  dstTri[1].y = srcBak->height*delta*(df4%101);
  dstTri[2].x = srcBak->width*delta*(df5%101);
  dstTri[2].y = src->height-1 + srcBak->height*delta*(df6%101);

  cvGetAffineTransform(srcTri,dstTri,warp_mat);
  cvWarpAffine(srcBak,dst,warp_mat);
  cvCopy(dst,src);
  //compute rotation matrix
  CvPoint2D32f center = cvPoint2D32f(src->width/2,src->height/2);
  cv2DRotationMatrix(center,angle,scale,rot_mat);
  //do the transformation
  cvWarpAffine(src,dst,rot_mat);
  //--------------------------字符显示-----------------------------------------
  char buf[8];
  char dspStr1[32] = {'\0'}; //
  char dspStr2[32] = {'\0'}; //
  char dspStr3[32] = {'\0'}; //

  memset(buf,'\0',sizeof(buf));
  strcat(dspStr1,"|");
  strcat(dspStr1,itoa(df4%101,buf,10));
  strcat(dspStr1,",");
  strcat(dspStr1,itoa(df5%101,buf,10));
  strcat(dspStr1,",");
  strcat(dspStr1,itoa(df6%101,buf,10));
  strcat(dspStr1,"|");

  strcat(dspStr2,"|angle=");
  strcat(dspStr2,itoa(int(angle),buf,10));
  strcat(dspStr2,",scale=");
  strcat(dspStr2,itoa(int(scale*100),buf,10));
  strcat(dspStr2,"%|");
  //「」┌└┘┐|
  strcat(dspStr3,"|");
  strcat(dspStr3,itoa(df1%101,buf,10));
  strcat(dspStr3,",");
  strcat(dspStr3,itoa(df2%101,buf,10));
  strcat(dspStr3,",");
  strcat(dspStr3,itoa(df3%101,buf,10));
  strcat(dspStr3,"|");
  cvPutText(dst,dspStr1,cvPoint(dst->width-120,20),&font,cvScalar(0,0xff));
  cvPutText(dst,dspStr2,cvPoint(dst->width-210,40),&font,cvScalar(0,0xff));
  cvPutText(dst,dspStr3,cvPoint(dst->width-120,60),&font,cvScalar(0,0xff));
  //-------------------------------------------------------------------------------------
  cvShowImage("at",dst);
  pressKey = cvWaitKey();
  // printf("src->width:%d\n",src->width);
  printf("%c pressed\n",pressKey);
  switch(pressKey)
  {
  case '1':
   df1++;
   break;
  case 0x230000:
   df1--;
   break;
  case '2':
   df2++;
   break;
  case 0x280000:
   df2--;
   break;
  case '3':
   df3++;
   break;
  case 0x220000:
   df3--;
   break;
  case '4': //旋转角度
   angle++;
   break;
  case 0x250000:
   angle--;
   break;
  case '6': //缩放
   scale+=0.01;
   break;
  case 0x270000:
   scale-=0.01;
   break;
  case '7':
   df4++;
   break;
  case 0x240000:
   df4--;
   break;
  case '8':
   df5++;
   break;
  case 0x260000:
   df5--;
   break;
  case '9':
   df6++;
   break;
  case 0x210000:
   df6--;
   break;
  case 27:
   cvReleaseImage(&dst);
   cvDestroyWindow("at");
   cvReleaseMat(&rot_mat);
   cvReleaseMat(&warp_mat);
   return 0;
  default:break;
  }
 }

 cvReleaseImage(&dst);
 cvReleaseMat(&rot_mat);
 cvReleaseMat(&warp_mat);
 return 0;
}

分享到:
评论
1 楼 ihopethatwell 2012-01-16  
楼主,在Android中 如何调用OpenCV2.0这个库?在Android.mk中如何配置?能介绍?

相关推荐

    Learning OpenCV中文版 第4章练习题5-9的工程文件

    Learning OpenCV中文版 第3章练习题2-8的工程文件 里面含有后面习题的工程文件 内容都亲自测过,可行 大部分来源于网页相关资源 在VS2010环境下,亲自测试可正确运行的工程文件。自己使用只需要正确配置Opencv即可

    学习opencv第六章课后答案,完整版(自己敲的,不是网上的)

    本资源是学习OpenCV过程中第六章课后的习题解答,且为作者亲自编写,非网络复制,确保了代码的原创性和有效性。这些代码已经过测试,能够成功编译和运行,对于深入理解和实践OpenCV的功能非常有帮助。 1. **6_17**:...

    Learning OpenCV中文版 第4章练习题1-5

    本压缩包包含的是第4章的部分练习题的工程文件,具体包括习题4-1至4-5。以下将对这些练习题涉及的知识点进行详细解析。 1. **习题4-1**:通常涉及到OpenCV的基础图像处理操作,如读取和显示图像。这可能要求你使用`...

    《学习OpenCV》习题答案

    根据提供的文件内容,我们可以发现这些内容是关于学习OpenCV编程的习题解答和示例代码。为了便于阐述,我们将从内容中提炼相关的知识点,并尽量详细地进行解释。 ### OpenCV基础概念 1. **IplImage结构体**:在...

    Learning OpenCV中文版 第3章练习题2-8的工程文件

    《OpenCV学习之旅:中文版第3章练习详解》 在深入探讨OpenCV这个强大的计算机视觉库时,实践是理解其精髓的关键。本资源集合包含了Learning OpenCV中文版第三章的多个练习题目的工程文件,涵盖了从基础操作到进阶...

    OpenCV计算机视觉基础教程(Python版)试题及答案.doc

    OpenCV 是一个强大的开源计算机视觉库,主要用于图像处理和计算机视觉任务。...这些知识点构成了OpenCV基础教程的重要部分,涵盖了图像处理、计算机视觉的基本操作和高级技术,是学习和理解计算机视觉所必需的基础。

    OpenCV计算机视觉基础教程(Python版慕课版)课件PPT,一共包含10章

    OpenCV计算机视觉基础教程(Python版)(慕课版)一共包含10章;...第4章 图像处理基础算法 第5章 边缘和轮廓 第6章 直方图 第7章 模板匹配与图像分割 第8章 特征检测 第9章 人脸检测与识别 第10章 机器学习与深度学习

    OpenCV计算机视觉基础教程(Python版)教学教案.pdf

    第 4 章:图像变换 * 色彩空间变换 * 几何变换 * 图像模糊 * 阈值处理 * 形态变换 教学方法 本课程采用理论课、讨论课、实验课和习题等多种教学方法,旨在让学生掌握计算机视觉的基础知识和应用。 教学资源 * ...

    OpenCV教程基础篇PDF书籍与书中源码

    第四章“数据结构及数据操作”讲解了OpenCV中的关键数据结构,如Mat矩阵、IplImage等,以及如何使用它们进行图像操作。这部分内容包括图像的创建、访问像素、拷贝和比较,以及内存管理和效率优化技巧。 第五章...

    数字图像处理习题整理版(pdf),附有答案

    《数字图像处理习题整理版(附答案)》是一份详尽的参考资料,主要针对学习数字图像处理的学生或研究人员。这份PDF文档包含了丰富的习题集和详细的解答,旨在帮助读者深入理解和掌握数字图像处理的核心概念和技术。 ...

    opencv课后题

    《OpenCV课后题》详解 在学习计算机视觉领域,OpenCV库是不可或缺的一部分,它提供了丰富的函数和工具,使得图像处理和计算机视觉算法的实现变得简单易行。本讲解将深入探讨《Learning OpenCV》一书中第五章和第七...

    数字图像处理(冈萨雷斯)中英文答案+Matlab和C++代码全网最完整版

    本资源包集合了该书第三版和第四版的中英文答案,以及配套的Matlab和C++代码实现,旨在为学习者提供全方位的学习支持。其中,Python案例的加入也使得这个资源库更加全面,满足不同编程背景学习者的需要。 数字图像...

    firrst.zip_firrst_opencv window

    【标题】"firrst.zip_firrst_opencv window"是一个关于OpenCV库入门教程的压缩文件,主要聚焦于如何在Windows操作系统中使用...教程内容可能包括详细的步骤指南、代码示例和可能的练习题,帮助用户快速上手OpenCV。

    Learning OpenCV

    每个章节都包含了理论讲解、实践案例和练习题。 - **内容**:本书介绍了如何使用OpenCV来加载和显示图片、播放视频、执行简单的图像变换等基本操作。通过这些实践性的内容,读者可以快速上手并掌握OpenCV的核心功能...

    程序设计基础(Python语言)-习题参考答案(周翔-版).docx

    3. **程序设计题**:练习了基本的输入输出、数学计算、条件判断、循环控制等编程技能。 例如,程序设计题中: - **习题1**:可能涉及到打印输出和文件操作,如使用IDLE创建新文件、输入输出代码并保存运行。 - **...

    FZU2021计算机视觉答案(三)

    在实验中,我们用到了一些Python的图像处理库,比如`matplotlib.pyplot`用于图像的显示,`numpy`用于数值计算和数组操作,`cv2`(即OpenCV库)用于图像的读取和处理。此外,还使用了Python的内置模块`math`进行数学...

    Python数学实验与建模课件.zip

    4. **概率论与数理统计**(04第4章 概率论与数理统计1.pptx和04第4章 概率论与数理统计2.pptx): 这两章将探讨随机变量、概率分布、假设检验、回归分析等统计方法,并使用Python进行实际计算,例如使用Scipy和...

    pyth数学实验与建模(司守奎)程序及数据

    4. **图论模型**(10第10章):图论在解决复杂网络问题中有广泛的应用,如交通网络、社交网络等。学习者会学习如何用Python实现图的构建、遍历和最优化算法,如Dijkstra算法、Floyd算法等。 5. **综合评价方法**...

    21天学通系列

    3. "21天学通C#.rar" - 这个RAR文件可能包含了一套完整的C#学习资料,可能包括电子书、练习题和项目实例。 4. "21天学通vc++.rar" - 同样的,这可能是关于Visual C++的全套学习资源,包括教程、示例代码和其他辅助...

Global site tag (gtag.js) - Google Analytics