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(); // 视图刷新显示 }



