例子
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace std;
using namespace cv;
Mat input_image;
Mat output_mask;
Mat output_image;
int main()
{
VideoCapture cam(1);
if (!cam.isOpened())
return 0;
namedWindow("input image");
namedWindow("output mask");
namedWindow("output image");
Mat skinCrCbHist = Mat::zeros(Size(256, 256), CV_8UC1);
ellipse(skinCrCbHist, Point(113, 155.6), Size(23.4, 15.2), 43.0, 0.0, 360.0, Scalar(255, 255, 255), -1);
while (true)
{
cam >> input_image;
if (input_image.empty())
return 0;
Mat ycrcb_image;
output_mask = Mat::zeros(input_image.size(), CV_8UC1);
cvtColor(input_image, ycrcb_image, CV_BGR2YCrCb);
for (int i = 0; i < input_image.cols; i++)
for (int j = 0; j < input_image.rows; j++)
{
Vec3b ycrcb = ycrcb_image.at<Vec3b>(j, i);
if (skinCrCbHist.at<uchar>(ycrcb[1], ycrcb[2]) > 0)
output_mask.at<uchar>(j, i) = 255;
}
input_image.copyTo(output_image, output_mask);
imshow("input image", input_image);
imshow("output mask", output_mask);
imshow("output image", output_image);
output_image = Scalar::all(0);
if (waitKey(30) == 'q')
return 0;
}
return 0;
}
参考
基础学习笔记之opencv(21):一个简单有趣的皮肤检测代码