单通道深度图转real类型的xyz三通道

本文探讨了在图像处理中,Halcon与OpenCV在像素遍历和赋值操作上的性能差异。Halcon擅长算法开发,但在像素级操作上效率较低,而OpenCV以其高效的速度处理CV_32FC3和CV_64FC3类型的图像。通过实例展示了如何用OpenCV快速转换深度图为XYZ三通道并保存为bmp格式。
摘要由CSDN通过智能技术生成

halcon部分:

*定义三维图的x、y的分辨率精度
xResolution:=0.04
yResolution:=0.04
*将深度图转为real类型三通道代表X、Y、Z的深度图
read_image (Image, 'E:/SMT电容虚焊测高/12-3测试图/12-03-15-34-58-155.tif')
get_image_size (Image, Width, Height)
*生成一副存real类型x坐标的单通道图
gen_image_const (Image1, 'real', Width, Height)
*生成一副存real类型y坐标的单通道图
gen_image_const (Image2, 'real', Width, Height)
*halcon 遍历图像的方式,针对单一像素进行操作
*不再是opencv专属
gen_rectangle1 (Rectangle, 0, 0, Height-1, Width-1)
get_region_points (Rectangle, Rows, Columns)
for Index := 0 to |Rows|-1 by 1
        set_grayval (Image1, Rows[Index], Columns[Index], Rows[Index]*xResolution)
        set_grayval (Image1, Rows[Index], Columns[Index], Rows[Index]*xResolution)
endfor

本来通过halcon来做,奈何halcon对像素操作太慢。改成opencv处理。

opencv部分:

处理根据.at方法进行处理,处理速度很快

通过

vector<Mat> ReadImg(cv::String path)

{        

        vector<cv::String> fn;
        glob(path, fn, false);
        vector<Mat> images;
        size_t count = fn.size(); //number of png files in images folder
        for (size_t i = 0; i < count; i++)
        {
         images.emplace_back(cv::imread(fn[i],2));
        }
         return images;
}

读取文件夹的图像。

通过

void ImageConvert()
{
    float xResolution = 0.04;
    float yResolution = 0.04;
    cv::String path = "E:\\Halcon程度代码\\图像处理DEMO\\深度图转real类型xyz三通道\\x64\\Debug\\image\\*.tif";
    vector<Mat> Img_Vec = ReadImage(path);
    for (int i = 0; i < Img_Vec.size(); i++)
    {
        Mat src = Img_Vec[i];
        Size sizeImg = src.size();
        Mat tempImg(sizeImg, CV_32FC3);
        for (int j = 0; j < src.rows; j++)
        {
            for (int k = 0; k < src.cols; k++)
            {
                tempImg.at<Vec3f>(j, k)[0] = xResolution*j;
                tempImg.at<Vec3f>(j, k)[1] = yResolution*i;
                tempImg.at<Vec3f>(j, k)[2] = src.at<float>(j, k);
            }
        }
        imwrite(".\\image\\Img_" + to_string(i) + ".bmp", tempImg);
    }
}

开始图像转换。

总结:针对算法的开发,halcon优势较为明显,但遇到像素遍历赋值的问题,opencv效率优势十分明显。

图像类型是CV_32FC3类型时,配合Vec3f使用。

图像类型是CV_64FC3类型时,配合Vec3d使用。

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

beyond951

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值