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/
|
|