- 操作系統:ubuntu22.04
- OpenCV版本:OpenCV4.9
- IDE:Visual Studio Code
- 編程語言:C++11
算法描述
該函數用于在圖像上繪制面部關鍵點(facial landmarks),例如使用 FacemarkLBF, FacemarkKazemi 等算法檢測到的 68 個面部關鍵點。
它會將每個關鍵點以圓形標記繪制在輸入圖像上,方便可視化檢測結果。
參數說明
參數名 | 類型 | 描述 |
---|---|---|
image | InputOutputArray | 輸入輸出圖像,通常是 BGR 彩色圖像 (CV_8UC3)。繪制后會在原圖上畫出關鍵點。 |
points | InputArray | 關鍵點坐標集合,通常是一個 std::vectorcv::Point2f 或 cv::Mat 類型。每個元素代表一個關鍵點的 (x, y) 坐標。 |
color | Scalar | 可選參數,繪制關鍵點的顏色,默認為藍色 Scalar(255, 0, 0)。如果是 BGR 圖像,可以傳入 (B, G, R) 值。 |
示例代碼
#include <opencv2/opencv.hpp>
#include <opencv2/face.hpp>using namespace cv;
using namespace cv::face;
using namespace std;int main() {// 加載圖像Mat img = imread("/media/dingxin/data/study/OpenCV/sources/images/Lenna.png");if (img.empty()) {cerr << "無法加載圖像!" << endl;return -1;}// 創建 Facemark 實例(如 LBF)Ptr<Facemark> facemark = FacemarkLBF::create();facemark->loadModel("lbfmodel.yaml");// 檢測人臉(使用 Haar 分類器或其它方式)CascadeClassifier face_cascade;face_cascade.load("haarcascade_frontalface_default.xml");vector<Rect> faces;Mat gray;cvtColor(img, gray, COLOR_BGR2GRAY);face_cascade.detectMultiScale(gray, faces);// 存儲關鍵點vector<vector<Point2f>> landmarks;// 檢測面部關鍵點bool success = facemark->fit(img, faces, landmarks);if (success) {for (size_t i = 0; i < landmarks.size(); i++) {// ? 繪制所有關鍵點drawFacemarks(img, landmarks[i], Scalar(0, 255, 0)); // 綠色點}imshow("Facemarks", img);waitKey(0);} else {cout << "未能檢測到面部關鍵點。" << endl;}return 0;
}