This is a simple example of how pass edge detection in a video using OpenCV. It uses the built-in OpenCV Canny edge detector algorithm.
#include
#include
#include
int main(int argc, char *argv[]) {
int delay = 0, key=0, i=0;
char *window_name;
CvCapture *video = NULL;
IplImage *frame = NULL;
IplImage *grey = NULL;
IplImage *edges = NULL;
/* check for video file passed by command line */
if (argc>1) {
video = cvCaptureFromFile(argv[1]);
} else {
printf("Usage: %s VIDEO_FILE\n", argv[0]);
return 1;
}
/* check file was correctly opened */
if (!video) {
printf("Unable to open \"%s\"\n", argv[1]);
return 1;
}
/* create a video window with same name of the video file, auto sized */
window_name = argv[1];
cvNamedWindow(window_name, CV_WINDOW_AUTOSIZE);
/* Get the first frame and create a edges image with the same size */
frame = cvQueryFrame(video);
grey = cvCreateImage(cvGetSize(frame), IPL_DEPTH_8U, 1);
edges = cvCreateImage(cvGetSize(frame), IPL_DEPTH_8U, 1);
/* calculate the delay between each frame and display video's FPS */
printf("%2.2f FPS\n", cvGetCaptureProperty(video, CV_CAP_PROP_FPS));
delay = (int) (1000/cvGetCaptureProperty(video, CV_CAP_PROP_FPS));
while (frame) {
/* Edges on the input gray image (needs to be grayscale) using the Canny algorithm.
Uses two threshold and a aperture parameter for Sobel operator. */
cvCvtColor(frame, grey, CV_BGR2GRAY);
cvCanny( grey, edges, 1.0, 1.0, 3);
/* show loaded frame */
cvShowImage(window_name, edges);
/* load and check next frame*/
frame = cvQueryFrame(video);
if(!frame) {
printf("error loading frame.\n");
return 1;
}
/* wait delay and check for the quit key */
key = cvWaitKey(delay);
if(key=='q') break;
}
}
To compile it in a well configured OpenCV development environment:
gcc edgeplayer.c -o edgeplayer `pkg-config opencv –libs –cflags`
To run it call edgeplayer and the name of the video:
./edgeplayer rick.avi
The result is something similar to this:
Hi,
From trial and error I found that using the following settings worked best for me:
Low-threshold: 100
High-threshold: 200
Aperture: 5
Is there an easy way to calculate these values automatically. Maybe frames with less white and more longer lines have the better values, but testing all the values and checking each frame one by one (even automatically) would take a long time.
Your thoughts?
http://www.kerrywong.com/2009/05/07/canny-edge-detection-auto-thresholding/
I put the code in my Visual studio and added the openCV input links. there is no error in the debugging but i cannot run the program, it just run and blinks out.
what is the things about at the end of ur post:
gcc edgeplayer.c -o edgeplayer `pkg-config opencv –libs –cflags`
could u help me on this.
Thank you very much
I put the code in my Visual studio and added the openCV input links. there is no error in the debugging but i cannot run the program, it just run and blinks out.
what is the things about at the end of ur post:
gcc edgeplayer.c -o edgeplayer `pkg-config opencv –libs –cflags`
could u help me on this.
Thank you very much
Sir, Plz send me code of canny edge detection of image in opencv without using inbuilt canny function.
Sir, can you please guide me to do my project on opencv and my topic is “Tracking Ellipse in video using Hough Transform “—- Thanks in Advance.