摄像头 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");
}
#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");
}
相关文章推荐
- OpenCV环境下Laplace(拉普拉斯)和Roberts基本边缘检测算子的实现代码
- 使用roberts Prewitt Sobel 三种算子对raw格式图像进行边缘检测
- OpenCV边缘检测:Canny算子,Sobel算子,Laplace算子,Scharr滤波器
- OpenCV-基本边缘检测算子Sobel实现
- OpenCV 边缘检测:Canny算子,Sobel算子,Laplace算子,Scharr滤波器合辑
- 图像梯度特征的常用边缘检测算子:Sobel、Prewitt、Roberts
- 【OpenCV入门教程之十二】OpenCV边缘检测:Canny算子,Sobel算子,Laplace算子,Scharr滤波器合辑合辑
- 【OpenCV入门教程之十二】OpenCV边缘检测:Canny算子,Sobel算子,Laplace算子,Scharr滤波器合辑
- Opencv实现图片素描风(调用摄像头+中值滤波+拉普拉斯边缘检测)
- Opencv学习笔记(二十三) 改进边缘检测算子-----Marr-Hildresh
- 【OpenCV入门教程之十二】OpenCV边缘检测:Canny算子,Sobel算子,Laplace算子,Scharr滤波器合辑
- 利用Canny边缘检测算子进行边缘检测的原理及OpenCV代码实现
- Sobel(索贝尔)边缘检测算子分析及opencv程序测试
- 13. 用Roberts、Sobel、Prewitt和Laplace算子对一幅灰度图像进行边缘检测。观察异同。
- opencv学习(七)(opencv3.0.0+VS2012+win7)打开摄像头并且进行边缘检测加上了滑动条
- 边缘检测,Roberts 算子,Sobel算子,Canny 算子
- 【OpenCV入门教程之十二】OpenCV边缘检测:Canny算子,Sobel算子,Laplace算子,Scharr滤波器合辑
- 【OpenCV入门教程之十二】OpenCV边缘检测:Canny算子,Sobel算子,Laplace算子,Scharr滤波器合辑
- 【OpenCV3图像处理】边缘检测:Sobel算子,Laplace算子,Canny算子
- opencv 图像处理 形态学操作 腐蚀 膨胀 开闭运算 阈值二值化 图像卷积 图像金字塔 Sobel算子 Laplacian 算子 candy边缘检测 霍夫变换 直方图