読者です 読者をやめる 読者になる 読者になる

tech::hexagram

personal note for technical issue.

【追記】OpenCVでIplImageにcvLoadImageを外部関数から呼んでうまくいかなかった

絶賛研究中.
OpenCVで外部の関数からcvLoadImageしてもうまく反映されないようだ,ということに気づきました.
サンプルソースをば.

#include <iostream>
#include "cv.h"
#include "highgui.h"

void OpenImage(IplImage* img_dst); //外部の関数

int main(void){
IplImage* img;
OpenImage(img);
while(cvWaitKey(10)!='q'){
cvShowImage("window",img);
}
return 0;
}

void OpenImage(IplImage* img_dst){
img_dst=cvLoadImage("./work/test.jpg",1);
}

このように書いても,mainでcvShowImageをしたところでまっさらのウィンドウがでてしまいます.

原因を色々考えましたが,どうやらこんな感じらしいです.

imgのヘッダ部分のアドレスをprintfしてみると,関数内と関数外では違うらしく,cvShowImageで読んでるアドレスと,OpenImage内のcvLoadImageで返ってくるアドレスが違うよう.

なので,こんな感じで書かないとダメなのかな?

#include <iostream>
#include "cv.h"
#include "highgui.h"

IplImage* OpenImage(void); //外部の関数

int main(void){
IplImage* img;
img=OpenImage();
while(cvWaitKey(10)!='q'){
cvShowImage("window",img);
}
return 0;
}

IplImage* OpenImage(img_dst){
IplImage* img_dst=cvLoadImage("./work/test.jpg",1);
return img_dst;
}

                          • -

追記:やさしい皆さんがコメントでアドバイスくださいました.
単にポインタ周りの勉強不足でしたね…恐縮です.