#include #include #include #include // cv::Canny() #include using namespace cv; using std::cout; using std::cerr; using std::endl; int main(int, char**) { Mat frame; cout << "Opening camera..." << endl; VideoCapture capture(1); // change the index to the desired camera // On linux, you have to specify the API preference // VideoCapture capture(1, cv::CAP_V4L); capture.set(cv::CAP_PROP_CONVERT_RGB, 0); if (!capture.isOpened()) { cerr << "ERROR: Can't initialize camera capture" << endl; return 1; } cout << "Frame width: " << capture.get(CAP_PROP_FRAME_WIDTH) << endl; cout << " height: " << capture.get(CAP_PROP_FRAME_HEIGHT) << endl; cout << "Capturing FPS: " << capture.get(CAP_PROP_FPS) << endl; cout << endl << "Press 'ESC' to quit, 'space' to toggle frame processing" << endl; cout << endl << "Start grabbing..." << endl; size_t nFrames = 0; bool enableProcessing = false; int64 t0 = cv::getTickCount(); int64 processingTime = 0; for (;;) { capture >> frame; // read the next frame from camera if (frame.empty()) { cerr << "ERROR: Can't grab camera frame." << endl; break; } int cols = frame.cols; double minVal1; double maxVal1; Point minLoc1; Point maxLoc1; cv::Mat udata (480, 640, CV_16S); memcpy(udata.data, frame.data, frame.cols); udata.convertTo(udata, CV_32S); udata = udata + 32768; udata = 65536 - udata; udata.convertTo(udata, CV_16U); nFrames++; if (nFrames % 10 == 0) { const int N = 10; int64 t1 = cv::getTickCount(); cout << "Frames captured: " << cv::format("%5lld", (long long int)nFrames) << " Average FPS: " << cv::format("%9.1f", (double)getTickFrequency() * N / (t1 - t0)) << " Average time per frame: " << cv::format("%9.2f ms", (double)(t1 - t0) * 1000.0f / (N * getTickFrequency())) << " Average processing time: " << cv::format("%9.2f ms", (double)(processingTime) * 1000.0f / (N * getTickFrequency())) << std::endl; t0 = t1; processingTime = 0; } if (!enableProcessing) { //clahe Mat im; cv::normalize(udata, im, 0, 255, cv::NORM_MINMAX, CV_8U); imshow("Frame1", im); } else { int64 tp0 = cv::getTickCount(); Mat processed; cv::Canny(frame, processed, 400, 1000, 5); processingTime += cv::getTickCount() - tp0; imshow("Frame", processed); } int key = waitKey(1); if (key == 27/*ESC*/) break; if (key == 32/*SPACE*/) { enableProcessing = !enableProcessing; cout << "Enable frame processing ('space' key): " << enableProcessing << endl; } } std::cout << "Number of captured frames: " << nFrames << endl; return nFrames > 0 ? 0 : 1; }