필터 지우기
필터 지우기

Cの関数からBitm​ap画像ポインタを受​け取り、MATLAB​でBitmap画像を​表示したい。

조회 수: 8 (최근 30일)
atsushi komuro
atsushi komuro 2023년 9월 12일
편집: atsushi komuro 2023년 9월 21일
まったくの初心者で恐縮ですが、
あるC言語ベースの画像取得APIを使用しており、MATLABでの使用方法についてアドバイスいただけないでしょうか。
Cでの記載は以下になります(型情報を省略しております)
①long size = ImageBufferSize(); //ここはできました
②ImageBuffer = malloc(size); //MATLABでのメモリ確保がいまひとつ理解できません(できない?)
③GetImage(&ImageBuffer); //確保したバッファの先頭アドレスを渡したい。C関数内でBitmap画像が書き込まれる。
④ImageBufferをimreadで画像を読み込んだのと同じように扱いたい。
情報不足でしたら申し訳ありません。
よろしくお願いします。

채택된 답변

交感神経優位なあかべぇ
편집: 交感神経優位なあかべぇ 2023년 9월 17일
MATLABとC言語を連携させるには、下記等の方法があります。
① MATLABからC言語を呼び出す。
loadlibraryを使用して、共有ライブラリ(.DLLや.soなど)を呼び出す。
 ・ MATLABで使用できる形式にC言語をmexを使用してビルドする。(Windows 64bitの場合は、.mexw64を生成させる)Visual Studioで開発したい場合は、こちらの方が公開しているVisual Studioのテンプレートを使用すれば、簡単に開発環境を設定でき、Visual Studioのビルドで、.mexw64ファイルまで生成できました。
② C言語からMATLABを呼び出す。
 ・ C言語内で、MATLAB Engineを呼び出して、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" // ImageBufferSizeGetImageが定義されている.hファイル
int32_t WrapperImageBufferSize()
{
return ImageBufferSize(); // とりあえず24 * 24 * 3を出力させた
}
void WrapperGetImage(uint8_t* imageData_out)
{
GetImage(imageData_out); // とりあえず縦横 24*24*3MATLABアイコンの画像データを出力させた
}
生成したPictureGetDll.dllとPictureGetDll.hをMATLABパスの通った同じフォルダにいれると下記の方法でloadlibraryで.dllを読み込むことができます。
下記DLLの呼び出し例
  댓글 수: 1
atsushi komuro
atsushi komuro 2023년 9월 21일
편집: atsushi komuro 2023년 9월 21일
ありがとうございます。まさにやりたいことはこれでした。
念のため、ひとつ質問させてください。
WrapperGetImageで渡す画像データの先頭アドレスはBitmapInfoheaderを省いたものを渡すべきでしょうか?
まずはやってみようと思います。

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 製品の管理에 대해 자세히 알아보기

제품


릴리스

R2023a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!