使用cv_image实现dlib pyramid_up

implementing dlib pyramid_up with cv_image

本文关键字:pyramid up dlib image cv 使用 实现      更新时间:2023-10-16

我试图使用dlib的函数pyramid_up在一个开放的cv Mat图像上,用dlib库的cv_image包装器包装。

cv::Mat & src
cv_image<rgb_pixel> cimg(src);
pyramid_up(cimg);

cv::Matdlib::cv_image能很好地协同工作,dlib::array2d<rgb_pixel>dlib::pyramid_up也能很好地协同工作。但是,当组合使用时,我从dlibs插补.h中得到一个错误列表,这些错误都说could not deduce template argument for..

任何想法?

编辑:这个问题是很久以前的事了,我不记得预期的目的,所以不能说解决方案是否有效。特蕾莎的建议似乎很可靠,如果将来发现的话,可以尝试一下。

你解决了吗?我成功地像这样使用了pyramid_up:

cv::Mat & src
array2d<bgr_pixel> img;
assign_image(img, cv_image<bgr_pixel>(src));

您可以使用pyrUp OpenCV函数代替。看起来很像……这里有一些ref: OpenCv 3.0教程.

//测试通过

#include <stdio.h>  
#include <stdlib.h>  
#include <string>  
#include <unistd.h>  
#include <sys/time.h>  
#include <iostream>  
#include <fstream>  
#include "opencv2/opencv.hpp"  
#include "dlib/opencv.h"  
#include "dlib/array2d.h"  
#include "dlib/image_io.h"  
#include "dlib/image_processing.h"  
#include "dlib/image_transforms.h"  
#include "dlib/gui_widgets.h"  
using namespace cv;  
using namespace dlib;  
typedef scan_fhog_pyramid<pyramid_down<6>> image_scanner_type;  
int main(void)  
{  
    Mat                                 src_bgr;  
    object_detector<image_scanner_type> detector;  
    array2d<bgr_pixel>                  img2d;  
    std::vector<dlib::rectangle>        dlib_rects;  
    image_window                        iwin;  
    std::ifstream svmbase("./detector.svm", std::ios::binary);
    deserialize(detector, svmbase);
    //load_image(img2d, "./uschwaa2.png");
    //pyramid_up(img2d);
    src_bgr = imread("./uschwaa2.png");         //same as load_image
    cv::resize(src_bgr,src_bgr,Size(256,256));  //same as pyramid_up assume original 128 x 128
    assign_image(img2d, cv_image<bgr_pixel>(src_bgr));
    dlib_rects = detector(img2d);
    iwin.clear_overlay();
    iwin.set_image(img2d);
    iwin.add_overlay(dlib_rects, rgb_pixel(255,0,0));
    usleep(3000000);
    return EXIT_SUCCESS;
}

我用这段代码来解决这个问题

cv::VideoCapture cap(0);
if (!cap.isOpened())
    {
        cerr << "Unable to connect to camera" << endl;
        getchar();
    }
cv::Mat temp;
cap.read(temp);
cv::imwrite("img/Latest.jpg", temp); // saving image to folder using openCV
matrix<rgb_pixel> test2;
load_image(test2, "img/Latest.jpg");
pyramid_up(test2);

它为我工作,这个想法是保存图像并再次加载为matrix<rgb_pixel>,以便pyramid_up()可以处理它。

注意:如果你在实时视频中运行识别,我认为这不会有帮助。