halcon彩色转QImage彩色
#include "win.h" Win::Win(QWidget *parent) : QWidget(parent) { this->resize(500,300); QLabel* label=new QLabel("我是中国人",this); label->move(10,10); HObject ho_Image; ReadImage(&ho_Image, "D:/bb/tu/ma.jpg"); QImage myImage=HobjectToQImage(ho_Image); //halcon彩色转QImage彩色 QTransform tf; //坐标变换 tf.rotate(180,Qt::XAxis); QImage im3=myImage.transformed(tf,Qt::FastTransformation); //返回旋转后的图像 QPixmap p; p.convertFromImage(im3); //把QImage转换成QPixmap label->setPixmap(p); label->adjustSize(); } Win::~Win() { } cv::Mat Win::HObject2Mat(HObject Hobj) //HObject类型转Mat类型 { HTuple htCh; HString cType; cv::Mat Image; ConvertImageType(Hobj, &Hobj, "byte"); CountChannels(Hobj, &htCh); Hlong wid = 0; Hlong hgt = 0; if (htCh[0].I() == 1) { HImage hImg(Hobj); void *ptr = hImg.GetImagePointer1(&cType, &wid, &hgt);//GetImagePointer1(Hobj, &ptr, &cType, &wid, &hgt); int W = wid; int H = hgt; Image.create(H, W, CV_8UC1); unsigned char *pdata = static_cast<unsigned char *>(ptr); memcpy(Image.data, pdata, W*H); } else if (htCh[0].I() == 3) { void *Rptr; void *Gptr; void *Bptr; HImage hImg(Hobj); hImg.GetImagePointer3(&Rptr, &Gptr, &Bptr, &cType, &wid, &hgt); int W = wid; int H = hgt; Image.create(H, W, CV_8UC3); std::vector<cv::Mat> VecM(3); VecM[0].create(H, W, CV_8UC1); VecM[1].create(H, W, CV_8UC1); VecM[2].create(H, W, CV_8UC1); unsigned char *R2 = (unsigned char *)Rptr; unsigned char *G = (unsigned char *)Gptr; unsigned char *B = (unsigned char *)Bptr; memcpy(VecM[2].data, R2, W*H); memcpy(VecM[1].data, G, W*H); memcpy(VecM[0].data, B, W*H); cv::merge(VecM, Image); } return Image; } QImage Win::HobjectToQImage(HObject img) //halcon彩色转QImage彩色 { //转换之后图像是倒立的 HTuple rImage , gImage , bImage , type , hvWidth , hvHeight; BYTE* vcPr = NULL; BYTE* vcPg = NULL; BYTE* vcPb = NULL; BYTE* vcPImage = NULL; INT32 vcWidth = 0 , vcHeight = 0; //ReadImage(&img,"C:/Users/Administrator/Desktop/8.bmp"); GetImagePointer3(img , &rImage , &gImage , &bImage , &type , &hvWidth , &hvHeight); vcWidth = (Hlong)hvWidth; vcHeight = (Hlong)hvHeight; vcPb = (BYTE*)rImage[0].L(); vcPg = (BYTE*)gImage[0].L(); vcPr = (BYTE*)bImage[0].L(); //计算bmp图片实际的宽度,因为bmp图片宽度必须四字节对齐 int bmpWidth = (vcWidth*3 + 3)/4*4; vcPImage = new BYTE[bmpWidth * vcHeight * 3];//給bmp图片分配内存空间 //将halcon图象类型HObject中的数据拷贝出来,放到C++变量类型中 for(int i = vcHeight - 1 ; i > 0 ; i--){ for(int j = 0 ; j < vcWidth ; j++){ *(vcPImage + i*bmpWidth + j*3 + 0) = *vcPb; *(vcPImage + i*bmpWidth + j*3 + 1) = *vcPg; *(vcPImage + i*bmpWidth + j*3 + 2) = *vcPr; vcPb++; vcPg++; vcPr++; } } QImage qimg(vcPImage,vcWidth,vcHeight,QImage::Format_RGB888); return qimg; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
2020-02-06 python-opencv-圆、椭圆与任意多边形的绘制
2019-02-06 pyqt5-信号与槽
2019-02-06 pyqt5的使用目录
2019-02-06 QLabel-标签控件的应用
2019-02-06 我的第一个例子