Cの関数からBitmap画像ポインタを受け取り、MATLABでBitmap画像を表示したい。
8 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
Categories
Find more on 製品の管理 in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!