From StackOverflow
- Remember that OpenCV works with BGR, so when you convert, use the CV_BGR2GRAY
- Be careful with the threshold in Canny, they should be different and with a ratio of 2 or 3( recommended). Might try 100-200...
- Try to avoid printing in every loop, that slows down a little bit your code
- For filters, try not to use a big window. A size 3 0r 5 at most is usually fine (Depending on your application). A size 11 is probably not required.
- consider using cv::Mat. It is far more flexible than IplImage and in fact ( no more Release Image...)
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
using namespace std;
using namespace cv;
int main(int, char**)
{
namedWindow( "Edges", CV_WINDOW_NORMAL );
CvCapture* capture = cvCaptureFromCAM(-1);
cv::Mat frame; cv::Mat out; cv::Mat out2;
while(1) {
frame = cvQueryFrame( capture );
GaussianBlur( frame, out, Size(5, 5), 0, 0 );
cvtColor( out ,out2, CV_BGR2GRAY ); // produces out2, a one-channel image (CV_8UC1)
Canny( out2, out2, 100, 200, 3 ); // the result goes to out2 again,but since it is still one channel it is fine
if( !frame.data ) break;
imshow( "Edges", out2 );
char c = cvWaitKey(33);
if( c == 'c' ) break;
}
return 0;
}
No comments:
Post a Comment