栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

【利用CkVision图像开发包和MFC实现条码读取】利用CkVision图像开发包和MFC实现条码读取

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【利用CkVision图像开发包和MFC实现条码读取】利用CkVision图像开发包和MFC实现条码读取

8、 Samples 功能API调用实例

CkVision 图像开发包是一款国产的视觉库,广泛用于在自动化领域中,从它的诞生到现在有15年历史了也进过了5次的改版和升级,目前是以C++形式提供给大家下面是一段用MFC做开发工具调用了CkVision的SDK库来实现条码读取。至于图像库大家可以在他的官网可以下载

以vs 文件->新建->项目->创建MFC 应用程式,基于对话框模、在静态库中使用MFC 的实例。

项目属性

添加当前CKVISION开发功能对应的.h与Lib文件。

选择到解决方案管理器->选择到当前的项目,展开列表,找到 Header Files->StdAfx.h 双击打开文件,然后添加:

#include "..\..\Include\CKGDI.h"

#include "..\..\Include\CKbase.h"

#include "..\..\Include\CKLocate.h"

#ifdef _WIN64

           #pragma comment(lib, "..\..\Lib_x64\CKbase.lib")

           #pragma comment(lib, "..\..\Lib_x64\CKGDI.lib")

           #pragma comment(lib, "..\..\Lib_x64\CKLocate.lib")

#else

           #pragma comment(lib, "..\..\Lib\CKbase.lib")

           #pragma comment(lib, "..\..\Lib\CKGDI.lib")

           #pragma comment(lib, "..\..\Lib\CKLocate.lib")

#endif

using namespace CKVision;            // CKVISION 命名空间

在程序入口处增加InitLibrary函数,用于初始化CKVision库, 只有调用初始函数:

    CKVision::InitLibrary(); // 初始化CKVision库

初始化之后才能正常其它图像处理的功能。

在程序退出终止处增加 ExitLibrary函数,用于释放 CKVision库:

CKVision::ExitLibrary(); // 退出CKVision库

以vs 2008 以上版本打开AllDemos.sln 加载功能实例文件。

打开工程文件后,可以选择类视图->选择当前需要查看的项目,右键鼠标->弹出菜单设置当前启动项目。

8.2)

          

->项目属性->配置属性->常规-> MFC 的使用

-> 在静态库中使用 MFC

8.3) ->项目属性->查看编译生成输出的文件路径。

连接器->输出文件.

8.4)

           添加当前CKVISION开发功能对应的.h与Lib文件。

选择到解决方案管理器->选择到当前的项目,展开列表,找到 Header Files->StdAfx.h 双击打开文件,然后添加:

#include "..\..\Include\CKGDI.h"

#include "..\..\Include\CKbase.h"

#include "..\..\Include\CKLocate.h"

#ifdef _WIN64

           #pragma comment(lib, "..\..\Lib_x64\CKbase.lib")

           #pragma comment(lib, "..\..\Lib_x64\CKGDI.lib")

           #pragma comment(lib, "..\..\Lib_x64\CKLocate.lib")

#else

           #pragma comment(lib, "..\..\Lib\CKbase.lib")

           #pragma comment(lib, "..\..\Lib\CKGDI.lib")

           #pragma comment(lib, "..\..\Lib\CKLocate.lib")

#endif

using namespace CKVision;            // CKVISION 命名空间

8.5)

           在程序入口处增加InitLibrary函数,用于初始化CKVision库, 只有调用初始函数:

    CKVision::InitLibrary(); // 初始化CKVision库

之后才能正常其它图像处理的功能。

           在程序退出终止处增加 ExitLibrary函数,用于释放 CKVision库:

CKVision::ExitLibrary(); // 退出CKVision库

注:详细代码请打开对应的…Demo 功能实例。

BarcodeDemo一维码检测

    在 StdAfx.h 的头文件中添加读取条码相关的文件链接。

// .h 头文件

#include "..\..\Include\CKGDI.h"

#include "..\..\Include\CKbase.h"

#include "..\..\Include\CKReader.h"

//.lib 文件

#ifdef _WIN64

#pragma comment(lib, "..\..\Lib_x64\CKGDI.lib")

#pragma comment(lib, "..\..\Lib_x64\CKbase.lib")

#pragma comment(lib, "..\..\Lib_x64\CKReader.lib")

#else

#pragma comment(lib, "..\..\Lib\CKGDI.lib")

#pragma comment(lib, "..\..\Lib\CKbase.lib")

#pragma comment(lib, "..\..\Lib\CKReader.lib")

#endif

using namespace CKVision;

//初始化CKVision库

    在资源视图 Dialog 中添加相应的界面操作。

    在对话框窗口的 .h 头文件中定义相应的图像处理功能:

    CPrImage     m_Image; // 基础图像类

    CFindBarcode m_FindBC;    // 条码定位

    CReadBarcode m_Barcode;   // 读取条码

    CGdiRect     m_Rect;      // 矩形框显示

    COverlay     m_Overlay;   // 图像显示表面, 前显示的动态图形,主要用于ROI 显示。

    COverlay     m_Results;   // 图像显示表面, 前显示的静态图形,主要用于检测结果生成图形显示。

    CGdiView     m_GdiView;   // 图形视图窗口

    在对话框窗口的.cpp 实现文件中添加相应的功能实现。

// 执行条码读取

void CBarcodeDemoDlg::OnExecute()

{

    // TODO: Add your control notification handler code here

    m_Barcode.Release();

    Overlay_DeleteAll(m_Results);

    // 一维码类型

    int nBarcodeType = 0;

    if( m_List1.GetSel(0) )

        nBarcodeType |= BARCODE_UPC_A;

    if( m_List1.GetSel(1) )

        nBarcodeType |= BARCODE_UPC_E;

    if( m_List1.GetSel(2) )

        nBarcodeType |= BARCODE_EAN_8;

    if( m_List1.GetSel(3) )

        nBarcodeType |= BARCODE_EAN_13;

    if( m_List1.GetSel(4) )

        nBarcodeType |= BARCODE_CODE_39;

    if( m_List1.GetSel(5) )

        nBarcodeType |= BARCODE_CODE_93;

    if( m_List1.GetSel(6) )

        nBarcodeType |= BARCODE_CODE_128;

    if( m_List1.GetSel(7) )

        nBarcodeType |= BARCODE_INTERLEAVED_2_5;

    m_Barcode.SetReadType( nBarcodeType );

    m_Barcode.SetFilterHalf( GetDlgItemInt(IDC_EDIT1) );

    m_Barcode.SetThreshold( GetDlgItemInt(IDC_EDIT2) );

    int fx = 0;

    if( IsDlgButtonChecked(IDC_CHECK1) )

        fx|=0x01;

    if( IsDlgButtonChecked(IDC_CHECK2) )

        fx|=0x02;

    if( IsDlgButtonChecked(IDC_CHECK3) )

        fx|=0x04;

    if( IsDlgButtonChecked(IDC_CHECK4) )

        fx|=0x08;

    m_FindBC.SetMaxCount( 20 );

    m_FindBC.SetOrientation( fx );

    m_FindBC.SetThreshold( GetDlgItemInt(IDC_EDIT4) );

    m_FindBC.SetMaxSpace( GetDlgItemInt(IDC_EDIT3) );

    // 开始计算时间

    BeginTime();

    // 执行条码定位

    if( m_Rect.GetVisible() ) {

        m_FindBC.Execute( m_Image, m_Rect );

    } else {

        m_FindBC.Execute( m_Image, MaxROI );

    }

    ROTRECT rc, *pRect;

    for( int i=0; i

        pRect = m_FindBC.GetCodeBorder(i);

        rc.center = pRect->center;

        rc.angle = pRect->angle;

        rc.width = pRect->width+10;

        rc.height = min(max(pRect->height-50,10),80);

        // 指定位置读取条码

        if( m_Barcode.Execute( m_Image, rc ) ) {

             CGdiRotBox* p1 = new CGdiRotBox(*pRect);

             if( p1!=NULL ) {

                 p1->Offset(0.5,0.5);

                 p1->SetPenWidth( 2 );

                 if( m_Barcode.GetCodeLen()>0 )

                     p1->SetPenColor( RGB(0,255,0) );

                 else

                     p1->SetPenColor( RGB(255,0,0) );

                 m_Results.AddItem(p1);// 添加显示图形到画面上显示

             }

             break;

        }

    }

    // 结束计算时间周期

    EndTime();

    SetDlgItemText( IDC_CODE_TEXT, m_Barcode.GetCodeText() );

    m_GdiView.Redraw();  // 视图刷新显示

}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/779690.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号