您的位置:首页 > 运维架构

摄像头 Roberts 算子 边缘检测 opencv

2010-03-11 11:21 274 查看
#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");

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐