c_cpp 用于在图像上绘制面部标记的示例
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c_cpp 用于在图像上绘制面部标记的示例相关的知识,希望对你有一定的参考价值。
int main() {
std::string landsFile = "land_list.txt";
std::string imageFile = "image.jpg";
// Define the rect
// cv::Rect r(130, 154, 208, 208);
// Load landmarsk from file
std::vector<cv::Point2f> lands;
std::string line;
std::ifstream is(landsFile.c_str());
while (std::getline(is, line))
{
std::istringstream iss(line);
float x, y, z;
if (!(iss >> x >> y >> z)) { break; } // error
lands.push_back(cv::Point2f(x, y));
}
float scale = 1.7; // (r.width + r.height) / 195;
float scalex = scale;
float scaley = scale;
float offsetx = 14;
float offsety = 14;
// offsety = r.height * 0.12;
size_t n = lands.size();
for (size_t i = 0; i < n; ++i) {
lands[i].x = (lands[i].x * scalex) + offsetx;
lands[i].y = (lands[i].y * scaley) + offsety;
}
// Load image
cv::Mat img = imread(imageFile);
// cv::rectangle(img, r, cv::Scalar(255, 255, 255));
// cv::resize(img, img, cv::Size(250, 250));
// img = img(r).clone();
// Draw lands on image
int point_size = 3;
for (size_t i = 0; i < n; ++i) {
cv::circle(img, lands[i], point_size + 1, cv::Scalar(0, 0, 0), -1);
cv::circle(img, lands[i], point_size, cv::Scalar(0, 255, 0), -1);
}
cv::imshow("Img", img);
int res = cv::waitKey(0);
if (static_cast<char>(res) == 's') {
cv::imwrite("img.png", img);
}
return 0;
}
以上是关于c_cpp 用于在图像上绘制面部标记的示例的主要内容,如果未能解决你的问题,请参考以下文章
c_cpp 如何在图像上绘制方向矩阵
无法使用 OpenCV2 检测面部标志
人脸检测进阶:使用 dlibOpenCV 和 Python 检测眼睛鼻子嘴唇和下巴等面部五官
人脸检测进阶:使用 dlibOpenCV 和 Python 检测面部标记
OpenCV 例程 300篇254.OpenCV 绘制图像标记
c_cpp 【70】查找并绘制轮廓综合示例