OpenCVがMatオブジェクトのデータにアクセスする際に異常が発生する---Matでのデータアクセス
2643 ワード
OpenCVのMatのデータへのアクセス方法については、http://blog.csdn.net/yang_xian521/article/details/7161335ここには普通の青年、文芸青年、暴力青年の言い方がある.
よくある質問、上のコード:
将
マトリクスタイプがCV_の場合64 FC 1の場合、Mat::at()はタイプチェックを実行します.
でも
この場合、読み取りの結果が正しくないだけで、異常は発生していないことがわかります
つかむ
したがって、マトリクスが他のタイプ(CV_64 FC 1ではない)の場合、読み出し時に使用するタイプが元のデータの記憶タイプよりも小さい限り、異常は発生しない.
読み取り時のタイプマッチングが重要です.
よくある質問、上のコード:
// newLDA.cpp : 。
//
/*#include "stdafx.h"
#include
#include
#include
#include "lda.h"
using namespace std;
using namespace cv;
int main(void)
{
double data[6][2]={{0,1},{0,2},{1,4},{8,0},{8,2},{9,4}};
Mat dmat=Mat(6,2,CV_64FC1,data);
int labels[6]={0, 0, 0, 1, 1, 1};
Mat lmat=Mat(1,6,CV_32SC1,labels);
//---------------------------------------------------------------
for(int i=0;i(i)[j]<
#include
using namespace std;
using namespace cv;
int main(void)
{
double data[2][2]={{1.0,2.0},{3.0,4.0}};
Mat dmat=Mat(2,2,CV_64FC1,data);
for(int i=0;i(i,j)<
将
cout<(i,j)<
からcout<(i,j)<
マトリクスタイプがCV_の場合64 FC 1の場合、Mat::at()はタイプチェックを実行します.
でも
#include "stdafx.h"
#include
#include
using namespace std;
using namespace cv;
int main(void)
{
float data[2][2]={{1.0,2.0},{3.0,4.0}};
Mat dmat=Mat(2,2,CV_32FC1,data);
for(int i=0;i(i,j)<
この場合、読み取りの結果が正しくないだけで、異常は発生していないことがわかります
つかむ
cout<(i,j)<
から cout<(i,j)<
異常発生したがって、マトリクスが他のタイプ(CV_64 FC 1ではない)の場合、読み出し時に使用するタイプが元のデータの記憶タイプよりも小さい限り、異常は発生しない.
読み取り時のタイプマッチングが重要です.