MFC窗口怎么显示halcon采集到的图片

在halcon上连接相机采集了图像,之后把这个部分的cpp代码导出了,如下:
void action()
{

// Local iconic variables
HObject ho_Image;

// Local control variables
HTuple hv_AcqHandle;

//Image Acquisition 01: Code generated by Image Acquisition 01
OpenFramegrabber("USB3Vision", 0, 0, 0, 0, 0, 0, "progressive", -1, "default", -1, "false", "default", "2BA200001454_DahengImaging_MER050560U3C", 0, -1, &hv_AcqHandle);
GrabImageStart(hv_AcqHandle, -1);
while (0 != 1)
{
GrabImageAsync(&ho_Image, hv_AcqHandle, -1);
}
CloseFramegrabber(hv_AcqHandle);
}

想新建一个MFC文件,之后在串口设一个按钮,把上述代码放到按钮代码里,但是问题是怎么才能让采集到的图像显示在窗口的PictureControl控件上呢?
查阅了一些资料有的说用OpenWindow和dispobj,但是好像需要涉及到图片数据类型的转换?求大神解答

c++

2个回答

是涉及转换问题,主要是把halcon类型转换为数组,然后根据宽高设置到控件,8位图用get_image_pointer1,24位图用get_image_pointer3,以下是我写的转换函数,你可以参考一下:

#ifdef HALCON11
int ConvertHalcon11ToKSJ(HObject Image, unsigned char ** ppImageData)//ppImageData在接口调用后需要释放
{
#else
int ConvertHalcon10ToKSJ(Hobject Image, unsigned char ** ppImageData)
{
#endif

    mirror_image(Image, &Image, "row");//上下反转图片
    HTuple     Hchannels;
    count_channels(Image, &Hchannels);
    int nChannels = Hchannels[0].I();
    HTuple     Htype;
    HTuple     Hwidth, Hheight;
    unsigned char * pTempData = NULL;
    if (nChannels == 1)//根据位图深度调用相应接口
    {
        HTuple hpoint;
        get_image_pointer1(Image, &hpoint, &Htype, &Hwidth, &Hheight);
        int nLineByte = MAKEWIDTHBYTES(Hwidth[0].I(), 8);
        pTempData = new unsigned char[nLineByte * Hheight[0].I()];
        unsigned char *  ptr = (unsigned char *)hpoint[0].L();
        for (int i = 0; i < Hheight[0].I(); i++)//深拷贝
        {
            memcpy(pTempData + i * nLineByte, ptr + i * Hwidth[0].I(), Hwidth[0].I());
        }
    }
    else if (nChannels == 3 || nChannels == 4)
    {
        HTuple Hred;
        HTuple Hgreen;
        HTuple Hblue;
        get_image_pointer3(Image, &Hred, &Hgreen, &Hblue, &Htype, &Hwidth, &Hheight);
        int nLineByte = MAKEWIDTHBYTES(Hwidth[0].I(), nChannels * 8);
        pTempData = new unsigned char[nLineByte * Hheight[0].I()];
        unsigned char *  ptr_red   = (unsigned char *)Hred[0].L();
        unsigned char *  ptr_green = (unsigned char *)Hgreen[0].L();
        unsigned char *  ptr_blue  = (unsigned char *)Hblue[0].L();
        for (int i = 0; i < Hheight[0].I(); i++)//将红、绿、蓝保存到像素中
        {
            int nOffset     = i * Hwidth[0].I();
            int nRealOffset = i * nLineByte;
            for (int j = 0; j < Hwidth[0].I(); j++)//深拷贝
            {
                int nPixelOffset = j * nChannels;
                pTempData[nRealOffset + nPixelOffset + 2] = ptr_red[nOffset + j];
                pTempData[nRealOffset + nPixelOffset + 1] = ptr_green[nOffset + j];
                pTempData[nRealOffset + nPixelOffset]     = ptr_blue[nOffset + j];
            }
        }
    }
    else
    {
        return -1;
    }

    *ppImageData = pTempData;
    return 0;
}
phenix2009
白色一大坨 回复Decim123: HObject 知道是什么吧,转换为一个图像的byte数组,你看一下get_image_pointer1和get_image_pointer3这两个函数,这些都是可以查的,写出来是方便你理解
4 个月之前 回复
Decim123
Decim123 感觉这个好复杂,看不太懂怎么应用到我这个简单程序里
4 个月之前 回复
dabocaiqq
请你们大家多多姿瓷我菠菜菌 也不知道你从哪里抄来的代码,还不给出出处。已经举报。
4 个月之前 回复
dabocaiqq
请你们大家多多姿瓷我菠菜菌 回答错误,误导人家,还出言不逊
4 个月之前 回复
1.建立对话框工程(字符集:多字节字符集) 
2.配置属性: 
(1)配置属性》c++》常规》附加库目录,加入: 
D:\Program Files\MVTec\HALCON-12.0\include\halconcpp; 

D:\Program Files\MVTec\HALCON-12.0\include; 

(2)配置属性》链接器》常规》附加库目录,加入: 
D:\Program Files\MVTec\HALCON-12.0\lib\x64-win64; 
(3)配置属性》链接器-》输入》附加依赖项,加入: 
halconcpp.lib 
3.Halcon调用,需在Dlg.h或调用文件中加入
include”HalconCpp.h”
using namespace HalconCpp; 

4. 
(1)在主窗口中显示 

/********在对话框中添加按钮,打开图像的路径*******/

CFileDialog dlg(TRUE,NULL,NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,"(*.jpg;*.png;*.bmp;*.tif)|*.jpg;*.png;*.bmp;*.tif||",NULL);
if(dlg.DoModal() == IDCANCEL)
{
GetDlgItem(IDC_BUTTON1_Readimage)->EnableWindow(TRUE);
return;
}

/*******返回带文件名的路径,并传递给编辑控件变量********/

CString strPathname = dlg.GetPathName();
char *str=(char*)LPCTSTR(strPathname );

/******读取图像******/

HTuple m_ImageWidth, m_ImageHeight, WindowHandle;
HObject Image; 
ReadImage(&Image,str); 
//GetImagePointer1(Image, &pointer, &Type, &m_ImageWidth, &m_ImageHeight);
GetImageSize(Image, &m_ImageWidth, &m_ImageHeight); 
SetWindowAttr("background_color","black"); 
OpenWindow(0,0,m_ImageWidth,m_ImageHeight,0,"","",&WindowHandle); 
//OpenWindow(0,0,m_ImageWidth,m_ImageHeight,0,"","",this); 
SetPart(WindowHandle,0, 0, m_ImageWidth, m_ImageHeight);
DispObj(Image, WindowHandle); ;
}



具体你可以看
https://blog.csdn.net/xueyuanling/article/details/52483954

Decim123
Decim123 回复见了你女王大人喵姐还不跪下: 我按照上面的方法试了,但是发现并不管用,每次打开调试器后点击按钮开关都没反应,设了断点发现程序再跑但是不显示图像
4 个月之前 回复
devmiao
见了你女王大人喵姐还不跪下 很详细,lz可以采纳了。
4 个月之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
halcon与MFC相机采集
MFC与halcon进行相机采集,有单帧采集和连续采集
qt 显示 halcon图片,保存窗口图片
基础是已经添加了halcon 和qt的路径;如果没有请看前面的博客,添加路径; qt显示图片之label Hlong MainWndID; HTuple hv_Width, hv_Height; HTuple hv_WindowID; HObject himage1, ho_ROI1; QString str = QDir::currentPath() +&quot;/Data/I2....
C#联合Halcon采集图片
机器视觉:VS环境下 C#联合Halcon编程开发 实现相机图像采集
mfc显示halcon图像
mfc显示halcon图像,………………………………………………………………………………………………
halcon——如何保存halcon窗口图片及文字
dev_clear_window () dev_close_window () read_image (Image, 'printer_chip/printer_chip_01') get_image_size (Image, Width, Height) dev_open_window (0, 0, 500, 300, 'green', WindowHandle) dev_displa...
MFC联合HAlcon双相机单帧采集图片
这里写自定义目录标题 问题:程序运行时首次采集都能行,再次点击CCD1,CCD2采集按钮,MFC界面的Picture Contrl控件直接黑屏了,但是我在if(CCD1==0){ }内增加了状态显示程序,显示已经进入到了if(){}语句内,但是图像就是显示不了,不清楚为什么?有木有大神知道原因 //CCD1采集按钮的程序 void CCounterPointsDlg::OnBnClickedCc...
MFC界面显示Halcon处理的图片
halcon实现对两幅图片进行标定校正,得到了视差图,现通过MFC界面显示该图片。目标:在标签页中正常显示视差图。rn过程中用两个窗口分别显示了遍历标定板的过程,用到了WindowHandle1和WindowHandle2.最终视差图显示在WindowHandle2上。最后的程序:rnif (HDevWindowStack::IsOpen())rn close_window(HDevWindowStack::Pop());//(关掉了显示最后一张遍历的WindowHandle2窗口)rn disp_obj(DisparityImage,WindowHandle1);//(在 WindowHandle1上显示视差图)rn此时halcon窗口不嵌入标签页。图片显示正常rn修改如下:rnif (HDevWindowStack::IsOpen())rn close_window(HDevWindowStack::Pop());rn if (HDevWindowStack::IsOpen())rn close_window(HDevWindowStack::Pop());//关掉两个窗口rn Hlong MainWndID =(Hlong) m_hWnd;rnopen_window(25,25,WidthL,HeightL,MainWndID,"","",&WindowHandle1);rn disp_obj(DisparityImage,WindowHandle1);rn不管之前关掉一个还是两个窗口,显示的图片都是有部分黑色。怎么解决?rn
halcon窗口显示不闪烁
halcon12:============================================== set_system('flush_graphic','false') clear_window(WindowHandle) disp_image(ModelImage, WindowHandle) set_system('flush_graphic','true') ...
MFC显示怎么gif图片?
现在我在做一个用户列表,列表中的每一项都需要显示一个或两个gif格式的小图标。MFC里显示gif格式的图片我之前只知道用CPictureEx显示,请问还有其他方法吗?
qt 显示halcon图片,放大缩小
我是使用qlabel来显示图片的。   1 获取图片    直接读取已有的图片,这是4张不一样大的图片 HObject himage1[6]; for (int i = 0; i &amp;lt; 4; i++) { QString str = QDir::currentPath() + &quot;/Data/I&quot; + QString::number(i+1) + &quot;.bmp&quot;; ...
halcon相机采集
利用halcon采集图像,处理,以及线程控制
Halcon实时采集图像
Halcon实时采集图像,并以系统时间实时保存到本地,使用大恒水星相机
MFC窗口下移动图片
是一道面试题,提供接口,实现接口的方法完成图片在窗口里面移动。
MFC读取BMP图像用Halcon显示
由于Halcon读取8M以上的图像是比较耗时,使用MFC读取BMP位图,并转为Halcon图像速度很快,亲测读一张18.5M的图,Halcon用时600多毫秒,MFC读只要100毫秒左右
mfc窗口最大化显示
//最大化显示 int cxScreen = ::GetSystemMetrics(SM_CXSCREEN); CRect rt; SystemParametersInfo(SPI_GETWORKAREA, 0, &amp;amp;rt, 0); MoveWindow(0, 0, cxScreen, rt.Height());
MFC的窗口显示问题
class AFX_EXT_CLASS HCtrl : public CCmdTarget //控件基类rnrnprotected:rn DECLARE_DYNCREATE(HCtrl) // 获取类名rnpublic:rn HCtrl();rn HCtrl(LPCRECT prc); // 添加子控件。HCtrl * pParent:父控件,LPCRECT prc: 控件区域。rn virtual ~HCtrl();rn virtual void initCtrl(); // 窗口建立完毕后初始化,还没有显示窗口rnprotected:rn CArray m_arChildren; // 所有子控件rn HCtrl * m_pParent; // 父控件rnrnvoid HCtrl::addCtrl( HCtrl * pCtrl ) // 公开的添加方法。rnrn if( m_arChildren.IsEmpty() )rn m_arChildren.SetSize( 0, 20 ); // 第一次添加时预留20个元素,避免内存碎片rn pCtrl->m_pParent = this;rn m_arChildren.Add( pCtrl ); rnrn问题:rn HCtrl m_ctrFrame; rn // 工具栏控件rn m_pPanlCtr = new PanlCtr( CRect(0, 0, 380, 0) ); // 在onsize中自适应大小rn m_pPanlCtr->setDock( HDOCK_RIGHT | HDOCK_FULLVERTICAL ); // 停靠右边,垂直方向自动充满rn m_pPanlCtr->setBackColor(0x776655);rn m_ctrFrame.addCtrl( m_pPanlCtr ); rnrn为什么就这一段代码就可以将m_pPanlCtr 显示在m_ctrFrame中去呢?
MFC/HALCON混合编程系列二_打开两个窗口_MFC布局
//Window1 CRect rect1; HWND hWnd1; GetDlgItem(IDC_PICWND1_STATIC)-&gt;GetClientRect(&amp;rect1); //GetDlgItem(HWND hDlg,int nIDDlgItem)通过ID获取一个指定的窗口内的控件,HWND应为当前窗口的句柄 ...
mfc 窗口显示
在进程A中CreateProcess()创建进程B,rn进程A的窗口每隔200毫秒刷新一次,这样的话就看不到进程B了,rn要怎么做可以在进程B被创建时就显示出来,并且覆盖进程A,进程B结束后才可以在对A进行操作。
HALCON显示文本,字符,字符串到窗口
    之前使用的是disp_message算子,但是HALCON13中似乎不能用了于是替换为两步,确定绘制点作为绘制开始区域的左上角,以及绘制文字    set_tposition (WindowHandle, Row[index], Column[index])    write_string (WindowHandle, Row[index]+','+ Column[index])set_t...
怎么在MFC窗口显示内存中的图像?
如果在内存中有一个二维数组pImagData[height][width]里面存放了一个 width*height 大小的 黑白图像的像素数据,那么,如果想把这些数据所形成的图像在MFC的窗口客户区显示出来,应该怎么弄?是不是要自己建立颜色表项和调色板?rnrn哪个好心人帮帮,最好写出具体点的步骤和语句,我不想先保存到电脑某个目录再调用打开菜单来打开显示,这样太麻烦了,rn即使这样,还是得先把这些数据存储成一幅 BMP 图像啊,还不如直接显示在窗口,因为我并不需要保存那个图像,只是想显示它!rn谢谢!!!!
halcon采集标定图像的规则
1.使用一个足够大的标定板 2.最小标记圆的直径应该为10个像素 3.使用黑背景,明亮的标定板 4.标定板的白色背景应具有至少100的灰度值 5.标定板的前景和背景之间的对比应优于100个灰度值 6.使用一个光源使得标定板灰度均匀 7.图像不能被过曝光 8.使用多幅图片覆盖整个视野 9.标定板使用各个方向 10.获取至少10幅,最好是15到20幅图像! 典型的标定图片
halcon采集电脑自带摄像头
c#调用halcon12实现采集电脑自带摄像头,支持其他工业相机采集扩展
halcon采集海康工业相机出错
软件:halcon12 平台:i7 window10 硬件:MV-CA050-10GM 情况:安装完相机驱动软件之后,并且尝试使用halcon去做采集,点击自动检测接口时,显示的时GigeVision接口的库 但是在点击连接之后,无法采集到图像,提示采集超时; 解决方案: 打开安装海康测试软件mvs的安装路径: halconHdevelop文件夹下面有海康对应的halcon接...
MFC/Halcon之halcon的安装及在vs2013中的配置
halcon的安装及在vs2013下的配置
怎么用mfc的对话框显示超大图片?
我现在有一个很大的图片,(600多MB) 是jpg的。 我想只显示其中的一部分,或者全部显示(缩略图), 有没有什么好的建议?或者什么方法好一些。。。。摆脱各位了。
求教mfc怎么显示菱形图片
图片是菱形的,一个挨一个,紧密相连,怎么显示出来,rn
MFC用GDI+显示的图片怎么清除
CRect Rect;rnrn CWnd* pic = GetDlgItem(IDC_STATIC1);rn Graphics graphics(pic->GetDC()->m_hDC);rn Image image((LPCTSTR)pathN);rnrnrnrnrn GetDlgItem(IDC_STATIC1)->GetClientRect(&Rect);rn // 将图像显示在界面之上 rn graphics.DrawImage(&image, 0, 0, Rect.Width(), Rect.Height());rn我用这种方法在图片控件上显示图片,如果要在别的地方,比如用一个按钮触发来清除这个控件上的图片该怎么做?
Halcon在MFC界面显示视频
Halcon与VC混合编程方法,在MFC界面上显示Halcon窗口
MFC 与 HALCON混合编程
MFC 与 HALCON混合编程教程,很详细。
MFC与Halcon混合编程
MFC与Halcon混合编程,基础教程
Halcon/MFC混合编程入门
为方便初学者,尽量写的详细。 一  新建一个项目,命名为halconVC,步骤如下: 二  配置MFC/halcon编程环境 1 在 项目-》属性-》c/c++-》常规的 附加包含目录中加入 "$(HALCONROOT)/include/cpp";"$(HALCONROOT)/include" 2 在 项目-》属性-》连接器》常规的附加库目录 加入$(HALCONR
Halcon MFC 条码识别
本例子只给出主要代码,具体操作流程不详述 1.识别的二维码如下 2.主要代码如下: Hobject ho_Image,region; HTuple str,barHandle; read_image(&ho_Image, "ean1301.png");//读图像 create_bar_code_model(HTuple(),HTuple(),&barHandle);//创建条码模型
MFC 怎么在指定位置显示指定路径的图片?
RT,MFC,编程环境是VC6.0,没法用CImage,请问用什么函数可以在窗口制定位置显示图片?
MFC下Halcon实时视频监视
要实现的功能是点击一个“开始”按钮,可以显示影像,再点击“停止”按钮,可以停止显示。 因为实时显示影像需要在一个循环里执行,为了在显示影像的同时还可以干别的(比如,点击“停止”按钮),这里需要用到多线程,即显示影像的代码放到子线程中,与主线程并发执行。 下面是开发步骤: 1、先把Halcon中实时显示的程序搞定 2、Halcon代码导出为C++代码 3
MFC利用Halcon显示图片
工具说明:Halcon10,VS2013,利用Picture Control控件进行图片显示包含的头文件:#include &quot;HalconCpp.h&quot;using namespace Halcon;需要包含的库路径:halconcpp.libvoid CHalconWndShowDlg::OnBnClickedOpen() { HTuple HWindowID; HTuple newHWindo...
MFC 读取 显示 图片
怎样在vc6 mfc中读取bmp/jpg,并且在MFC的界面中画出来,并且得到rgb矩阵进行计算?
MFC图片移动与显示
VS MFC gif、bmp、jpg等格式图片移动与显示
MFC 图片的显示
我有2张图片 1.bmp (对话框背景的图片), 2.bmp 需要在对话框一块区域显示的图片。rn其中2.bmp是以白色为背景,中间有一个红色的圆圈rnrn当我用picture control 显示的时候,rn把白色背景给显示出来了, 我如何让白色的背景透明, 也就是不显示白色的,只显示我需要显示的。
halcon vc mfc barcode
halcon vc mfc barcode 利用halcon+mfc做的一个例子
MFC显示Mat图片
Opencv在1.0的时代,在MFC框架上显示图片可以通过Cvvimage类里的DrawPicToHDC( IplImage *img, UINT ID)方法方便的显示出来,当然这里使用的是IpIImage图片格式,到了Opencv2.0,不知道什么原因,Cvvimage类被舍弃了,当然你还可以方便的转换Mat到IpIImage。 这就导致在MFC上显示图片的这个过程变的复杂起来:首先我们需
相关热词 c# 去空格去转义符 c#用户登录窗体代码 c# 流 c# linux 可视化 c# mvc 返回图片 c# 像素空间 c# 日期 最后一天 c#字典序排序 c# 截屏取色 c#中的哪些属于托管机制