Cの関数からBitmap画像ポインタを受け取り、MATLABでBitmap画像を表示したい。
10 views (last 30 days)
Show older comments
atsushi komuro
on 12 Sep 2023
Edited: atsushi komuro
on 21 Sep 2023
まったくの初心者で恐縮ですが、
あるC言語ベースの画像取得APIを使用しており、MATLABでの使用方法についてアドバイスいただけないでしょうか。
Cでの記載は以下になります(型情報を省略しております)
①long size = ImageBufferSize(); //ここはできました
②ImageBuffer = malloc(size); //MATLABでのメモリ確保がいまひとつ理解できません(できない?)
③GetImage(&ImageBuffer); //確保したバッファの先頭アドレスを渡したい。C関数内でBitmap画像が書き込まれる。
④ImageBufferをimreadで画像を読み込んだのと同じように扱いたい。
情報不足でしたら申し訳ありません。
よろしくお願いします。
0 Comments
Accepted Answer
交感神経優位なあかべぇ
on 17 Sep 2023
Edited: 交感神経優位なあかべぇ
on 17 Sep 2023
MATLABとC言語を連携させるには、下記等の方法があります。
① MATLABからC言語を呼び出す。
・ MATLABで使用できる形式にC言語をmexを使用してビルドする。(Windows 64bitの場合は、.mexw64を生成させる)Visual Studioで開発したい場合は、こちらの方が公開しているVisual Studioのテンプレートを使用すれば、簡単に開発環境を設定でき、Visual Studioのビルドで、.mexw64ファイルまで生成できました。
② C言語からMATLABを呼び出す。
個人的には、loadlibraryを使用した共有ライブラリの呼び出しが、一番直感的に使用できるかなと思います。
Windowsでのloadlibraryの使用例を書いてみました。下記の例ではまず、PictureGetDll.h、PictureGetDll.c等をDLLファイルとしてビルドします。
PictureGetDll.h
#pragma once
#ifdef DLLEXPORT
#define DECLSPEC __declspec(dllexport)
#else
#define DECLSPEC __declspec(dllimport)
#endif
#include <stdint.h>
DECLSPEC int32_t WrapperImageBufferSize();
DECLSPEC void WrapperGetImage(uint8_t* imageData_out);
PictureGetDll.c
#define DLLEXPORT
#include "PictureGetDll.h"
#include "OriginalCode.h" // ImageBufferSizeやGetImageが定義されている.hファイル
int32_t WrapperImageBufferSize()
{
return ImageBufferSize(); // とりあえず24 * 24 * 3を出力させた
}
void WrapperGetImage(uint8_t* imageData_out)
{
GetImage(imageData_out); // とりあえず縦横 24*24*3のMATLABアイコンの画像データを出力させた
}
生成したPictureGetDll.dllとPictureGetDll.hをMATLABパスの通った同じフォルダにいれると下記の方法でloadlibraryで.dllを読み込むことができます。
下記DLLの呼び出し例
More Answers (0)
See Also
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!