处理视频帧 - sumpig/OpenCV GitHub Wiki
videoProcessor.h
下面这段代码会在两个窗口中播放输入和输出图像,输出图像为输入图像的 Canny 边缘检测
#include "videoProcessor.h"
void canny(cv::Mat& img, cv::Mat& out) {
if (img.channels() == 3)
cv::cvtColor(img, out, cv::COLOR_BGR2GRAY);
cv::Canny(out, out, 100, 200);
cv::threshold(out, out, 128, 255, cv::THRESH_BINARY_INV);
}
int main() {
VideoProcessor processor;
processor.setInput("H:\\opencv_c++\\bike.avi");
processor.displayInput("Current Frame");
processor.displayOutput("Output Frame");
processor.setDelay(1000. / processor.getFrameRate());
processor.setFrameProcessor(canny);
processor.run();
return 0;
}
VideoProcessor 类实现的要点
- 设置每一帧调用的回调函数
void setFrameProcessor(void (*frameProcessingCallback)) (cv::Mat&, cv::Mat&) {
process = frameProcessingCallback;
}
- 使用帧处理类代替帧处理函数
void setFrameProcessor(FrameProcessor* frameProcessorPtr) {
// 使回调函数失效
process = 0;
frameProcessor = frameProcessorPtr;
}