整理日: 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. MFC ListControl使用方法

    在原来博客中有:MF CListControl 简单功能使用 推荐文章:MFC类CtrlList用法 今天又又一次来介绍点新东西:双击击listcontrol  做出响应.当然你能够做的还有非常多,比 ...

  2. [D3] 5 .rangeBands

    # d3.max ```js var xScale = d3.scale.ordinal() .domain(dataset) .rangeBands([0,w],0.3, 0.1);``` ### ...

  3. iOS 开发中的争议(二)

    这是该系列的第二篇.在本文中,我想讨论的是:对于 UI 界面的编写工作,到底应该用 xib/storyboard 完成,还是用手写代码来完成? 本着 “使用过才有发言权” 原则,我介绍一下我的经历: ...

  4. Cracking the coding interview

    写在开头 最近忙于论文的开题等工作,还有阿里的实习笔试,被虐的还行,说还行是因为自己的水平或者说是自己准备的还没有达到他们所需要人才的水平,所以就想找一本面试的书<Cracking the co ...

  5. NoteExpress格式化复制指定输出样式

    在NoteExpress中没有看到为命令“选中的题录右击 => 复制题录 => 格式化复制”指定输出样式的明确配置项,但格式化复制的输出样式也是可以变化了,随细节大面板里的“预览”标签页里 ...

  6. linux下的openoffice安装和服务自启动

    openoffice下载并安装 wget http://sourceforge.net/projects/openofficeorg.mirror/files/4.1.1/binaries/zh-CN ...

  7. USB开发——内核USB驱动+libusb开发方法

    linux内核已经具备usb驱动,所以一些设备使用可以免驱,libusb是针对linux内核中ubs驱动的一套api,会自行调用usb驱动接口,并为应用提供api接口,将usb设备开发减少为应用层开发 ...

  8. update inner join

    string sql = @"update a set a.M_ParentID=b.M_ParentID, a.M_Name=b.M_Name, a.M_Seq=b.M_Seq from ...

  9. 滚动效果,marquee便签

    语法: <marquee></marquee> 例子: <marquee><font size=+3 color=red>Hello, World< ...

  10. 在.Net中进行跨线程的控件操作(上篇:Control.Invoke)

    本文的重点在于介绍如何在多线程编程中,从非UI线程上访问界面中的控件.有过多线程编程经验的人都知道,当我们在非UI线程上试图给一个界面中的控件赋值的时候,比如说label的Text属性,系统会抛出一个 ...