整理日: 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. テストプログラム

  1. #include "cv.h"
  2. #include "highgui.h"
  3. void __fastcall TForm1::Button1Click(TObject *Sender)
  4. {
  5. IplImage* ml;
  6. ml = cvLoadImage( "./sample.bmp" );
  7. }

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

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* を使います。

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

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. Ueditor自定义默认宽度高度

    如题. 最近需要使用到网页后台富文本编辑器.经过同学推荐,最后决定使用百度家的Ueditor. 官方地址:http://ueditor.baidu.com/website/ 贴吧地址:ueditor讨 ...

  2. foreach -begin -process -end

    gc d:\vm.txt|foreach  -begin {write-host "It's beginning."}  -process {$_ +"aa"} ...

  3. MVC 音乐商店 第 8 部分: 购物车与 Ajax 更新

    MVC 音乐商店是介绍,并分步说明了如何使用 ASP.NET MVC 和 Visual Studio 为 web 开发教程应用程序. MVC 音乐商店是一个轻量级的示例存储实现它卖音乐专辑在线,并实现 ...

  4. Myapplication的作用与理解

    1.前沿在设置里面,对应于某一个应用,虽然没有启动,但是上面有一个终止按钮,说明这个应用时启动的,只是里面没有Activity,所以说使用android退出把一个应用退出,实际上他所对应的Applic ...

  5. App升级时数据库的迁移更新

    前一段时间在进行App升级的时候,由于一开始版本初期没有考虑完善,导致走了很多弯路,后来经过自己的一些思考,总结出了一些在app升级的时候,数据库内文件同步保持更新的经验,希望能给大家带来帮助. 总体 ...

  6. eclipse快速查找一个变量、方法或者类被引用的地方

    最近不停debug,拿到一个变量之后总是要先概览一下才好下手,之前一直用Ctrl+F来做,太麻烦.今天查了下eclipse使用,发现有快捷键,使用方法: 先双击要查看的变量.方法或者类,使之被选中,然 ...

  7. Linux安装QQ 2017

    网上有很多wineQQ,是基于2012或者2013做的,然而当安装好后登录他会提示版本过来,我在优麒麟的应用商店里找到了一个基于国际版QQ的Wine版本,这里说下安装过程. 先上两张成果图: 下载地址 ...

  8. PS之火焰铁锈字

    效果图 素材一:将下图在PS中打开,选择菜单:编辑>定义图案,命名后关闭图案 素材二 1.新建如下画布 2.将素材二拖入新建好的画布(使用移动工具) 3.先将文字图层复制4次(ctrl+J)并且 ...

  9. javascript类继承系列一

    js中没有提供类(class,抽象类,接口等高级的抽象),可以用new,但new的function的对象,构造器 但在js中可以通过function来模拟类的一些特性function fun_name ...

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

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