【追記】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; }
-
-
-
-
-
-
-
-
-
-
-
-
- -
-
-
-
-
-
-
-
-
-
-
-
追記:やさしい皆さんがコメントでアドバイスくださいました.
単にポインタ周りの勉強不足でしたね…恐縮です.