gpt4 book ai didi

c++ - 如何在 dlib 的 array2d 图像上从 dlib::rectangle 创建 cv::Mat?

转载 作者:行者123 更新时间:2023-11-28 04:11:50 25 4
gpt4 key购买 nike

我使用 dlib 的 hog 检测器,因为它发现人脸比 opencv haarcascades 好得多。但它无法检测脸上的情绪(或者可以???)。我需要从带有面部的 dlib::rectangle 中提取一个“子图像”,并从中创建 cv::Mat 以使用预加载的“haarcascade_smile.xml”调用 c​​v::detectMultiScale()。

如何执行此提取/转换?

下面的代码示例...

int DetectionProc(void * param){ // async operation
auto instance =(Detector *)param;
const unsigned int delay = 1000 / instance->OPS;
std::vector<dlib::rectangle> detects;
array2d<rgb_pixel> sample;

while(instance->OPS){
unsigned int elapsed = GetTickCount();

EnterCriticalSection(&instance->cs_buf);
assign_image(sample,instance->buffer);
instance->buffer.clear();
LeaveCriticalSection(&instance->cs_buf);

if (sample.size()){
detects = instance->face_detector(sample);
if (!detects.empty()){
detection res(GetTickCount());
if (!instance->smile_detector.empty()){
// TODO
// extract subimage from detects.front() on sample to cv::Mat face;
// instance->smile_detector.detectMultiScale(); on face
// set res.smiled to true on success
}
EnterCriticalSection(&instance->cs_result);
instance->result = res;
LeaveCriticalSection(&instance->cs_result);
}
}
elapsed = GetTickCount() - elapsed;
Sleep((elapsed < delay) ? (delay - elapsed) : 0);
}
return 0;
}

最佳答案

有两种方法可以实现这一点,要么通过 extract_image_chips dlib 中的功能(docs)或通过从包装中提取子图像 cv::Mat使用相应的 OpenCV API。您将使用哪一个取决于选择对其余处理管道的方便程度。

从您的样本得出结论,OpenCV 路径似乎是最方便的(但再次请检查设计和 API 选项):

// 1.) Wrap your "sample" dlib-image in cv::Mat
// dlib::toMat() is available through #include <dlib/opencv.h>
cv::Mat sample_mat = dlib::toMat(sample);

// 2.) Iterate through your detections
for (const auto& rect: detects)
{
// 3.) Extract the rectangle sub-image using OpenCV
cv::Mat rect_sub = sample_mat(
cv::Rect(rect.left(), rect.top(), rect.width(), rect.height()));

// 4.) Process the sub-image
}

关于c++ - 如何在 dlib 的 array2d<rgb_pixel> 图像上从 dlib::rectangle 创建 cv::Mat?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57595274/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com