void CameraWorker::doWork(){ CameraFrame frame; unsigned int frameWidth, frameHeight; frameWidth = camera->getFrameWidth(); frameHeight = camera->getFrameHeight(); std::cout << "CameraWorker: opened camera " << frameWidth << " x " << frameHeight << std::endl << std::flush; camera->startCapture(); _isWorking = true; int i = 0; while(_isWorking){ frame = camera->getFrame(); //frame = camera->lockFrame(); cv::Mat frameCV(frame.height, frame.width, CV_8U, frame.memory); frameCV = frameCV.clone(); // Emit new frame emit newFrame(frameCV); //std::cout << "frame" << i << std::endl << std::flush; i+=1; QApplication::processEvents(); } camera->stopCapture(); // Emit finished signal emit finished(); }
CameraFrame SLCameraVirtual::getFrame(){ unsigned int depth = counter % encoder->getNPatterns(); cv::Mat patternCV = encoder->getEncodingPattern(depth); // pick out first channel cv::Mat patternCVChannels[3]; cv::split(patternCV, patternCVChannels); patternCV = patternCVChannels[0]; // general repmat cv::Mat frameCV; frameCV = cv::repeat(patternCV, (frameHeight+patternCV.rows-1)/patternCV.rows, (frameWidth+patternCV.cols-1)/patternCV.cols); frameCV = frameCV(cv::Range(0, frameHeight), cv::Range(0, frameWidth)); frameCV = frameCV.clone(); // add noise frameCV.convertTo(frameCV, CV_32F); cv::Mat noise(frameCV.size(), frameCV.type()); cv::randn(noise, 0, 3); frameCV += noise; frameCV.convertTo(currentBuffer, CV_8U); counter++; //cv::imwrite("frameCV.png", frameCV); // return as CameraFrame struct CameraFrame frame; frame.height = currentBuffer.rows; frame.width = currentBuffer.cols; frame.memory = currentBuffer.data; frame.timeStamp = counter; frame.sizeBytes = currentBuffer.rows*currentBuffer.cols; return frame; }