名前 題名 ▼ 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/ > GIF,JPEG,PNG画像ファイル及びLZH,ZIPファイルをアップロードできます.600 x 1200 ピクセルを超える画像は縮小表示されます(画像クリックで拡大表示). (上限122000(120k)バイト) 削除キー Link