整理日: 20154/6

Borland C++BuilderでOpenCVを使う

確認 Turbo C++ 2007/03

1. ダウンロード&インストール

http://sourceforge.net/projects/opencvlibrary/

から、opencv-win (OpenCV_1.0.exe) をダウンロード&インストールして下さい。

→C:\Program Filesへインストールされます。

2. ライブラリのビルド

C++Builderの場合そのまま.libが使えません。

アクセサリ>コマンドプロンプトを開き、

cd C:\Program Files\OpenCV_make

を実行して下さい。

→プロンプトが”C:\Program Files\OpenCV_make>”となります。

コマンドプロンプトで

make -f make_all_bc.mak

を実行して下さい。

→コンパイルが始まります。

→OpenCv/bin/のDLLが更新されます。

→OpenCV/lib/のLIBが更新されます。

(ここでやろうとしていること)

C:\Program Files\OpenCV_make フォルダにある makefileと、オプションとして make_all_bc.mak を実行しようとしています。 多分”bc”がボーランドコンパイラで、”gnu”がGNU、 ”ms”マイクロソフトなどと思います。

3. C++Builderの設定

OpenCv/bin/から、cv100dll、cxcore100.dll、highgui100.dll、の3つを、 出来上がるEXEと同じフォルダにコピーします。

OpenCV/lib/から、cv.lib、cxcore.lib、highgui.lib、の3つを プロジェクトと同じ位置へコピーします。

ビルダー>プロジェクト>プロジェクトに追加で、上記3つのLIBを追加します。

ビルダー>プロジェクト>オプションのインクルードパスにて

C:\Program Files\OpenCV\cxcore\include

C:\Program Files\OpenCV\cv\include

C:\Program Files\OpenCV\otherlibs\highgui

C:\Program Files\OpenCV\otherlibs\cvcam\include

を追加します。

4. テストプログラム

#include "cv.h"
#include "highgui.h"
void __fastcall TForm1::Button1Click(TObject *Sender)
{
IplImage* ml;
ml = cvLoadImage( "./sample.bmp" );
}

コンパイルが通り実行できれば使用可能です。

5. memo

公式ドキュメントの引数に”CvArr”が出てきますが。

CvArr
is used only as a function parameter to specify that the function accepts arrays of more than a single type,for example IplImage, CvMat or even CvSeq. The particular array type is determined at runtime by analyzing the first 4 bytes of the header.

より引数CvArr
には、IplImage* CvMat* CvSeq* を使います。

typedef struct _IplImage
{
int nSize; /* sizeof(IplImage) */
int ID; /* version (=0)*/
int nChannels; /* チャンネル数。RGBなら3
OpenCV の関数では、主に 1~4 を使います */
int alphaChannel; /* OpenCV では使いません */
int depth; /* 1画素の持つ型
IPL_DEPTH_8U : 8 bit 自然数
IPL_DEPTH_8S : 8 bit 整数
IPL_DEPTH_16S : 16 bit 整数
IPL_DEPTH_32S : 32 bit 整数
IPL_DEPTH_32F : 32 bit 実数
IPL_DEPTH_64F : 32 bit 実数 */
char colorModel[4]; /* OpenCV では使いません */
char channelSeq[4]; /* ditto */
int dataOrder; /* 0 - RGB RGB RGB, 1 - RRR GGG BBB
OpenCV では、0 のみ使用可能 */
int origin; /* 0 - 左上が原点, 1 - 左下が原点 */
int align; /* データアライメント。
OpenCVでは参照しません。widthStep のみ参照します */
int width; /* width。横の画素数 */
int height; /* height。縦の画素数 */
struct _IplROI *roi; /* Region Of Interest。
処理対象の領域を持つポインタ。使わないなら NULL */
struct _IplImage *maskROI; /* must be NULL */
void *imageId; /* ditto */
struct _IplTileInfo *tileInfo; /* ditto */
int imageSize; /* 画素値配列のバイトサイズ
(==image->height*image->widthStep)*/
char *imageData; /* アライメントされた画素値配列へのポインタ */
int widthStep; /* アライメントした横のバイトサイズ */
int BorderMode[4]; /* OpenCV では使いません */
int BorderConst[4]; /* ditto */
char *imageDataOrigin; /* 画素値配列へのポインタ(アライメントは不要)
deallocation には必要らしいが、NULLでイイと思う*/
}IplImage; //---------------------------------------------------------------------------
//OpenCvを起動(指定フォルダから呼び出す)
#pragma comment(lib, "../opencv/highgui.lib")
#include "highgui.h"
void __fastcall TMainForm::Button2Click(TObject *Sender)
{
typedef IplImage* (*CVLOAD)(char*); HINSTANCE hCxcore = LoadLibrary("../opencv/cxcore097.dll");//これをロードしてから
HINSTANCE hHighgui = LoadLibrary("../opencv/highgui097.dll"); int width = 0;
if(hCxcore && hHighgui){
//DLLで定義されているメソッド名(ヘッダではない)
CVLOAD DllFunction = (CVLOAD)GetProcAddress(hHighgui,"_cvLoadImage");
IplImage* ml = DllFunction("./sample.bmp");
width = ml->width;
} FreeLibrary(hCxcore);
FreeLibrary(hHighgui);
}
//---------------------------------------------------------------------------

OpenCV for c++Builder的更多相关文章

  1. 基于OpenCV的人脸识别[iOS开发笔记(2)]

    开始了OpenCV的试水工作了... 1.Get ready 在OpenCV中我们会使用函数cv::CascadeClassifier 来进行人脸检测.但是在使用本函数之前我们需要添加一个XML文件对 ...

  2. Cygwin编译自己定义OpenCV库报错:opencv_contrib: LOCAL_SRC_FILES points to a missing file

    今天受命帮师弟调个OpenCV4Android 识别银行卡的程序,版本号为OpenCV4Android2.4.9,使用方式为前文介绍的第一种方式,即通过jni调用opencv.如杂家前文所述,配套的N ...

  3. 解决OpenCV JavaCameraView相机preview方向问题

    网上找了很多解决都是有问题的,研究了半天源码解决了这个问题.我是从整个相机启动和数据传输的过程着手的,这里捡重点介绍一下,最后会贴上修改后的两个源文件. 首先要知道一个概念. 图里的小圆圈是Home按 ...

  4. Opencv - Android 配置安装

    1.道具们: windows 7 64位 OpenCV-2.4.6-android-sdk-r2 ( http://sourceforge.net/projects/opencvlibrary/fil ...

  5. OpenCV Java Tutorials- Camera Calibration

    2020-10-10原文地址:https://opencv-java-tutorials.readthedocs.io/en/latest/09-camera-calibration.html#id1 ...

  6. opencv在图像显示中文

    在图像定位和模式识别时,经常需要把结果标注到图片上,标注内容可以是数字字母.矩形框等(opencv支持的)或者是中文汉字(借助freetype). 1.显示数字/矩形框 #include <op ...

  7. opencv中Mat与IplImage,CVMat类型之间转换

    opencv中对图像的处理是最基本的操作,一般的图像类型为IplImage类型,但是当我们对图像进行处理的时候,多数都是对像素矩阵进行处理,所以这三个类型之间的转换会对我们的工作带来便利. Mat类型 ...

  8. opencv源码:cascadedetect

    级联分类器检测类CascadeClassifier,提供了两个重要的方法: CascadeClassifier cascade_classifier; cascade_classifier.load( ...

  9. 基于OpenCV的车辆检测与追踪的实现

    最近老师布置了一个作业,是做一个基于视频的车辆检测与追踪,用了大概两周的时间做了一个简单的,效果不是很理想,但抑制不住想把自己的一些认识写下来,这里就把一些网络上的博客整理一下分享给大家,希望帮助到大 ...

随机推荐

  1. 从零开始学C++之数据封装与抽象:分别用C和C++来实现一个链栈

    下面通过分别用C和C++来实现一个链栈(链表实现),从中体会数据封装抽象的思想: C语言实现:  C++ Code  1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 ...

  2. 開始折腾cocos2d-x,使用批处理来创建项目

    開始抽出时间学习cocos2d-x了.尽管C和C++还都不咋地.只是在开发中学习记忆也许会更深吧. so决定从今天開始正式学习的用自己的空暇时间折腾它了.正好这个五一没什么事.昨天搭建了一下开发环境. ...

  3. richTextBoxBulletClass

    设置和获取选中的样式为 1. 2. 3. #region 数字序列 1. 2. 3. 4. 5. ... private bool bOrder = false; public bool Select ...

  4. mybatis10 实现类代理对象开发

    mapper实现类代理对象开发 要想让mybatis自动创建dao接口实现类的代理对象,必须遵循一些规则: SqlSession sqlSession = sqlSessionFactory.open ...

  5. lua 基本

    Lua 的语法比较简单,学习起来也比较省力,但功能却并不弱. 所以,我只简单的归纳一下 Lua 的一些语法规则,使用起来方便好查就可以了.估计看完了,就懂得怎么写 Lua 程序了. 在 Lua 中,一 ...

  6. Ⅵ.AngularJS的点点滴滴-- 指令

    指令 基本用法 <html> <script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.2.2/angul ...

  7. Linux下搭建Oracle11g RAC(2)----配置DNS服务器,确认SCAN IP可以被解析

    从Oracle 11gR2开始,引入SCAN(Single Client Access Name) IP的概念,相当于在客户端和数据库之间增加一层虚拟的网络服务层,即是SCAN IP和SCAP IP  ...

  8. Linux netstat命令参数解释

    netstat –ntlp 显示 tcp 的监听端口 netstat –ntlp 显示 tcp udp 的监听端口 netstat –r 显示路由表 netstat –rn 显示路由表不做名称解析(较 ...

  9. (转)ie浏览器判断

    常用的 JavaScript 检测浏览器为 IE 是哪个版本的代码,包括是否是最人极端厌恶的 ie6 识别与检测. var isIE=!!window.ActiveXObject; var isIE6 ...

  10. Java GetAndPost

    import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import ...