摄像头 Roberts 算子 边缘检测 opencv

来源:互联网 发布:ai人工智能 电影结局 编辑:程序博客网 时间:2024/05/29 12:53

#include "cvcam.h"
#include "cv.h"
#include "highgui.h"
#include <cstdio>

/*void example2_4(IplImage*image)
{
cvNamedWindow("Example4-in");
   cvNamedWindow("Example4-out");
    cvShowImage("Example4-in",image);

IplImage *out=cvCreateImage(cvGetSize(image),
         IPL_DEPTH_8U,//多少位
         3);//多少色
cvSmooth(image,out,CV_GAUSSIAN,3,3);
 cvShowImage("Example4-out",out);
  cvReleaseImage(&out);
   cvWaitKey(0);
  cvDestroyWindow("Example4-in");
   cvDestroyWindow("Example4-out");
}*/

  int g_slider_position = 0;
  CvCapture* g_capture = NULL;
  void onTrackbarSlide(int pos)
  {
   //pos=g_slider_position;
      cvSetCaptureProperty(g_capture,CV_CAP_PROP_POS_FRAMES,pos);
  
 
  }

 /* void callback ( IplImage *image )//在图像上画一条水平蓝线
{
    IplImage *image1 = image;
    int i, j;
    assert ( image );
    for ( i = 0; i < image1->height/2; i += 10 )
    {
        for ( j = ( image1->widthStep ) * i;
              j < ( image1->widthStep ) * ( i + 1 );
              j += image1->nChannels )
        {
            image1->imageData[j] = ( char ) 255;
            image1->imageData[j + 1] = 0;
            image1->imageData[j + 2] = 0;
        }
    }
}*/
void main( int argc, char** argv )
{
// IplImage*img=cvLoadImage("C://zhongqiu.bmp",1);//
 cvNamedWindow("Example1",CV_WINDOW_AUTOSIZE);
 //g_capture=cvCreateFileCapture("F://opencv//aviConsoleOpencv//avid.avi");
 //g_capture = cvCaptureFromCAM(0); // capture from video device #0
     g_capture = cvCreateCameraCapture(0);
 int frames=(int)cvGetCaptureProperty(g_capture,CV_CAP_PROP_FRAME_COUNT);
 if(frames!=0){
  cvCreateTrackbar("position",
   "Example1",
   &g_slider_position,
   frames,
   onTrackbarSlide);
  
   
  
 }
 IplImage*frame;
 int height,width,step,channels;
  uchar *data;
  //uchar *data2;
int i,j,k,x,y,t;
  // get the image data
 

 while(1){
  frame=cvQueryFrame(g_capture);
  if(!frame) break;
  // cvSetTrackbarPos("position","Example1", g_slider_position++);
 
      assert ( frame );
   height    = frame->height;
  width     = frame->width;
  step      = frame->widthStep;
  channels  = frame->nChannels;
  data      = (uchar *)frame->imageData;
   /* for ( i = 0; i <frame->height; i += 10 )
    {
        for ( j = (frame->widthStep ) * i;
              j < ( frame->widthStep ) * ( i + 1 );
              j +=  frame->nChannels )
        {
             frame->imageData[j] = ( char ) 255;
             frame->imageData[j + 1] = 0;
             frame->imageData[j + 2] = 0;
        }
    }
*/

//以下是算子核心
   for(i=0;i<height;i++) {
    for(j=0;j<width;j++) {
     for(k=0;k<channels;k++){
               // data[i*step+j*channels+k]=255-data[i*step+j*channels+k];
      x=data[i*step+j*channels+k]-data[(i+1)*step+j*channels+k];
      y=data[i*step+j*channels+k]-data[i*step+(j+1)*channels+k];
      t=(int)(sqrt(x*x+y*y)+0.5);
      if(t>255)
       t=255;
      data[i*step+j*channels+k]=t;

     
     }
    }
   }

   //cvcamSetProperty ( 0, CVCAM_PROP_CALLBACK, callback );
     //example2_4(frame);
  cvShowImage("Example1",frame);
  char c=cvWaitKey(33);
  if(c==27) break;
 }

  //cvNamedWindow("Example1",0);
 //cvShowImage("Example1",img);
 
 cvReleaseCapture(&g_capture);
 cvDestroyWindow("Example1");
 

}