更快地将卤化物图像转换为 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);
我正在尝试通过 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);