opencv 彩色图像前景提取 c++
时间: 2023-07-28 15:07:59 浏览: 103
以下是一个 C++ 版本的 OpenCV 彩色图像前景提取的示例代码:
```C++
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace std;
using namespace cv;
int main()
{
VideoCapture cap("test.mp4");
if (!cap.isOpened()) {
cout << "Error opening video stream or file" << endl;
return -1;
}
Mat frame;
Ptr<BackgroundSubtractorMOG2> fgbg = createBackgroundSubtractorMOG2();
while (cap.read(frame)) {
Mat fgmask;
fgbg->apply(frame, fgmask);
vector<Mat> channels(3);
split(frame, channels);
for (int i = 0; i < 3; i++) {
channels[i] = channels[i].mul(fgmask);
}
Mat fg;
merge(channels, fg);
imshow("Frame", fg);
int keyboard = waitKey(30);
if (keyboard == 'q' || keyboard == 27)
break;
}
cap.release();
destroyAllWindows();
return 0;
}
```
在这个示例代码中,我们首先创建了一个 BackgroundSubtractorMOG2 对象 fgbg。在 while 循环中,我们通过调用 fgbg->apply(frame, fgmask) 对当前帧进行背景建模和前景检测,得到前景掩码 fgmask。然后,我们使用 cv::split() 函数将原始图像拆分成三个通道,对每个通道分别进行操作。使用 cv::mul() 函数将前景掩码和每个通道相乘,得到前景图像的每个通道。最后,我们使用 cv::merge() 函数将三个通道合并成一张彩色图像 fg。最后,我们将 fg 显示出来。
阅读全文