OpevCVの設定がおかしいように思われますが。
コード:
//インクルード
#include "stdafx.h"
#include "C:\Program Files\opencv\build\include\opencv2\opencv.hpp"
//ライブラリ
#pragma comment(lib,"C:Program Files\\opencv\\build\\x86\\vc10\\lib\\opencv_core240d.lib")
#pragma comment(lib,"C:Program Files\\opencv\\build\\x86\\vc10\\lib\\opencv_imgproc240d.lib")
#pragma comment(lib,"C:Program Files\\opencv\\build\\x86\\vc10\\lib\\opencv_highgui240d.lib")
#pragma comment(lib,"C:Program Files\\opencv\\build\\x86\\vc10\\lib\\opencv_objdetect240d.lib")
はVersionはなにでしょうか?
OpenCV2.4.11でテスト。下記はビルドできます。
コード:
//インクルード
#include "d:\\opencv\\build\\include\\opencv2\\opencv.hpp"
#include "d:\\opencv\\build\\include\\opencv2\\core\core.hpp"
#include "d:\\opencv\\build\\include\\opencv2\\highgui\\highgui.hpp"
//ライブラリ
#pragma comment(lib,"d:\\opencv\\build\\x86\\vc11\\lib\\opencv_core2411d.lib")
#pragma comment(lib,"d:\\opencv\\build\\x86\\vc11\\lib\\opencv_highgui2411d.lib")
#pragma comment(lib,"d:\\opencv\\build\\x86\\vc11\\lib\\opencv_imgproc2411d.lib")
#pragma comment(lib,"d:\\opencv\\build\\x86\\vc11\\lib\\opencv_objdetect2411d.lib")
// プログラムは main から始まります(Entry Point:main)
int main(int argc, char** argv){
//画像領域の確保
IplImage *LoadImage = cvCreateImage(cvSize(240, 320), IPL_DEPTH_8U, 3);
IplImage *hsv_image = cvCreateImage(cvGetSize(LoadImage), IPL_DEPTH_8U, 3);
// 幅320px、高さ240pxで赤色の画像データを生成
cv::Mat redImg(cv::Size(320, 240), CV_8UC3, cv::Scalar(0, 0, 255));
redImg = cvLoadImage("d:\\dat\\m.jpg", CV_WINDOW_AUTOSIZE);
// 画像表示用のウィンドウを生成
cv::namedWindow("red", cv::WINDOW_AUTOSIZE);
// ウィンドウに画像を表示
cv::imshow("red", redImg);
/*
//画像の読み込み
//LoadImage = cvLoadImage("Z:\\win\\Desktop\\zemi\\image.jpg",CV_WINDOW_AUTOSIZE);
LoadImage = cvLoadImage("d:\\dat\\m.jpg",CV_WINDOW_AUTOSIZE);
//表示ウィンドウの作成
cvNamedWindow("ImageOut",CV_WINDOW_AUTOSIZE);
//読み込んだ画像の表示
cvShowImage("ImageOut",LoadImage);
cvCvtColor(LoadImage, hsv_image, CV_BGR2HSV);
cvNamedWindow("HSV" ,CV_WINDOW_AUTOSIZE);
cvShowImage("HSV",hsv_image);
*/
//何かを押すまで待機
cvWaitKey(0);
//後始末
cvReleaseImage(&LoadImage);
cvReleaseImage(&hsv_image);
cvDestroyAllWindows();
return 0;
}
見ている資料が古くありませんか。
ーーーーー
OpenCV2.0以降では、cv::Matが利用でき、初期化や後始末、さまざまな画像処理に関しても、扱いやすくなっているのですが、 既にある関数を利用したい場合には、一旦IplImageに変換しなくてはなりませんし、逆にIplImageをcv::Matへ変換したい場合もあります。
これらの変換ルーチンはcv::Matクラスで定義されていて、実際には非常に簡単に変換できます。 しかし、コーディング中は、何故か難しく考えすぎて、戸惑うことが多々ありますので、ここにまとめておきます。
opencv.jpの説明では、 変換後のインスタンスに「データはコピーされません」という記述がなされています。 これは、変換後のインスタンスは、元データを参照しているだけで、データ部分の複製はされないということです。 このため、変換後のオブジェクトを後始末する必要はありません(してはいけません)。
cv::MatからIplImageへの変換
cv::MatのインスタンスをIplImageに変換するには、そのまま代入するだけです。 ただし、代入先は、ポインタ(IplImage*)ではなくIplImageのインスタンスそのものです。
代入先のIplImageを、事後に無理やりcvReleaseImageで解放してはいけません。。
//変換元画像
cv::Mat mat(240, 320, CV_8UC3);
//変換先画像
IplImage iplImage = mat; //ポインターではない
IplImage iplImage2 = mat; // 〃
//後始末について
//変換先画像を以下のように無理に解放してはいけない。
// IplImage* pIplImage = &iplImage;
// cvReleaseImage(&pIplImage);
・・・・・・・・・・・・・・・・・・