喫茶XRAYトップページ

[スレッド全体
]

[12591] OpenCVでラベリング返信 削除
2019/2/12 (火) 08:55:40 Mr.XRAY
SO さんが

>ただ使用できたとして、ラベリングはVer3〜から実装されたみたいですし、
>ヘッダファイルのDelphi移植が必要かもしれません。。。


と書いているのですが,某掲示板で反応があったらやってみようと思っていました.
でも反応がなさそうなのでやってみました.

以下から opencv-3.0.0.exe をダウンロードして
opencv_world300.dll を使用するコードを以下のようにしました.

https://sourceforge.net/projects/opencvlibrary/files/opencv-win/3.0.0/

  function connectedComponents(image: IMAT;
                               labels: IMAT;
                               connectivity: Integer;
                               ltype: Integer): Integer;
                               cdecl; external 'opencv_world300.dll';

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
  LFilePath   : string;
  LSource     : IMAT;
  LlabelImage : IMAT;
  LnLabels    : Integer;
begin
  LFilePath  := 'd:\Opencv\resource\media\matchshapes.jpg';
  LSource := imread(LFilePath, CV_LOAD_IMAGE_GRAYSCALE);

  LnLabels := connectedComponents(LSource, LlabelImage, 8, CV_32S);
  ShowMessage(IntToStr(LnLabels));
end;

コンパイルして実行すると下図のように関数がないというエラーになりました.
そんだらことはなかんべ,ということで DLL 内の関数名を調べてみました.
何と !! 先頭に ? がついています.
これは残念ですが DLL を作成する時の問題なので,Delphi 側からは対処できません.

最新版の OpenCV 4.0.1 でも同じでしたが,
OpenCV 4.0.1 には 32 ビットの DLL は同梱されていません.64 ビット用だけです.

珍しい,滅多にはないケースだとは思いますが,
こういうことが世の中にはあるということで.ハイ.

参考

[[006] [05_DLL 内のエクスポート関数名を列挙]
http://mrxray.on.coocan.jp/Delphi/plSamples/006_Assembler_exe.htm#05

[06_DLL 内の関数の使用方法 - 非公開 API の使用方法]
http://mrxray.on.coocan.jp/Delphi/Others/Usage_Win32API.htm#06

[C++で作成したDLLを他の言語で利用できるようにする]
https://konuma.org/blog/2007/04/24/c_b43e/



[12592] Re:OpenCVでラベリング返信 削除
2019/2/13 (水) 08:21:20 Mr.XRAY
> 珍しい,滅多にはないケースだとは思いますが,
> こういうことが世の中にはあるということで.ハイ.


ネット上の記事によると,OpenCV 3.0.0 から
開発言語が C から VC++ (マイクロソフト) になったそうです.
そのためと思われます.

DLL は,各種のプログラム言語から共通に使用することを目的にした,
一種のライブラリなのですが,VC++ のデフォルトが VC++ 専用の DLL 作成
ということでございます.さすがにマイクロソフトです.


[12596] Re:OpenCVでラベリング返信 削除
2019/2/15 (金) 07:47:21 SO
▼ Mr.XRAYさん

!?。
自分も「dumpbin /exports」にて調べてみました。
おっしゃる通りなんか装飾されてます。。。

[12597] Re2:OpenCVでラベリング返信 削除
2019/2/15 (金) 09:30:45 Mr.XRAY
> 自分も「dumpbin /exports」にて調べてみました。
> おっしゃる通りなんか装飾されてます。。。


あっ,dumpbin の方が手軽ですね.
ソースコードが入手可能なようですので,VC++ で DLL を作成すればいいのかも知れませんが,
DLL を素直に利用する立場としてはやるつもりはありません (^^)
Microsoft computer Vision API を利用するとか,
TMSSoftware の製品とか Mitov Software - VisionLab を利用するとかを考えていただくとして..

ということで,↑ の関係リンクを記事のページに追加しておきました.


[▼次のスレッド]
INCM/CMT
Cyclamen v3.82