更快地将卤化物图像转换为 opencv mat?

Convert halide image to opencv mat faster?

我正在尝试通过 mat.at(i,j) 将缓冲区图像转换为 opencv mat,但它运行了 20 毫秒。它太 slow.How 以提高速度?或其他方法转换将图像缓冲到 cv::Mat?

    Halide::Func gray;

    Halide::Var x, y;

    gray(x, y) = Halide::cast<uint8_t>( 0.299f * image(x, y, 0) +0.587f * image(x, y, 1) + 0.114f * image(x, y, 2));

    Halide::Var xi,yi;
    gray.tile(x,y,xi,yi,4,4).vectorize(xi,4).parallel(y);

    Halide::Buffer<uint8_t> output = gray.realize(image.width(), image.height());

    Mat h2m = Mat::zeros(image.height(),image.width(), CV_8UC1);

    for( int i=0;i<image.height();i++){
            for(int j=0;j<image.width();j++){
                    h2m.at<uchar>(i,j)=output(j,i); 
            }
    }
    imshow("gray",h2m);

只需将指针包装到 cv::Mat 数据:

Halide::Buffer<uint8_t> buf(img.data, width, height);

并在里面实现你的功能:

gray.realize(buf);