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】查找并绘制轮廓综合示例