OpenCV中Mat、Ipllmage以及Halcon中Hobject数据类型之间转换

本文介绍了如何在OpenCV的Mat、IplImage数据类型与Halcon的HObject之间进行转换。通过示例代码展示了从IplImage到Mat、Mat到IplImage的浅拷贝操作,以及HObject到IplImage和IplImage到HObject的转换过程,涉及到图像的通道分离和数据复制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

OpenCV中Mat、CVMat、Ipllmage类型都可以代表和显示图像。IplImage是由CVMat派生,而CvMat由CvArr派生即CvArr -> CvMat -> IplImage,Mat类型则是C++版本的矩阵类型(CvArr用作函数的参数,无论传入的是CvMat或IplImage,内部都是按CvMat处理)。

Mat类型侧重于计算,数学性较高; 而CvMat和IplImage类型更侧重于“图像”,如缩放、单通道提取、图像阈值操作等进行了优化。

IplImage 转 Mat:

IplImage* image = cvLoadImage("lena.jpg");

Mat mat = cvarrToMat(image);

Mat 转 IplImage:

IplImage img = IplImage(mat);

以上两种属于浅拷贝,只创建图像头文件,没有进行数据拷贝

//Hobject to IplImage(Opencv中的Mat转换为Halcon中的HObject)

cv::Mat HImageToIplImage(HObject &Hobj)

{

        //get_grayval(Image : : Row, Column : Grayval)

        cv::Mat pImage;

        HTuple htChannels;

        HTuple width, height;

        width = height = 0;

        //转换图像格式

        ConvertImageType(Hobj, &Hobj, "byte");

        CountChannels(Hobj, &htChannels);

        HTuple cType;

        HTuple grayVal;

        if (htChannels.I() == 1)

        {

                GetImageSize(Hobj, &width, &height);

                pImage = cv::Mat(height, width, CV_8UC1);

                pImage = Mat::zeros(height, width, CV_8UC1);

                for (int i = 0; i < height.I(); ++i)

                {

                        for (int j = 0; j < width.I(); ++j)

                        {

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

lifei092

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

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

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

打赏作者

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

抵扣说明:

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

余额充值