2016-02-29 2 views
-1

У меня на самом деле проблема с Iterator в OpenCV. Я читаю из LabView a Image и сохраняю это в Mat imgIn. Впоследствии я создаю второй Mat для изображения, который выполняет вещи Mat imOut. Когда я клонирую это и попытаюсь отправить его обратно в LabView, я получаю черное изображение, чтобы не было отправлено никакой информации.Ошибка OpenCV MatIterator

#include <windows.h> 
#include "extcode.h" 
#include <iostream> 
#include <stdio.h> 
#include "opencv2/opencv.hpp" 
#include "opencv2/core.hpp" 
#include "opencv2/core/utility.hpp" 
#include "opencv2/imgproc.hpp" 
#include "opencv2/imgcodecs.hpp" 
#include "opencv2/highgui.hpp" 

using namespace cv; 
using namespace std; 

// --- Dll entry point --- 
BOOL APIENTRY DllMain(HANDLE hModule, 
        DWORD ul_reason_for_call, 
        LPVOID lpReserved 
       ) 
{ 
UNREFERENCED_PARAMETER(hModule); 
UNREFERENCED_PARAMETER(lpReserved); 
switch (ul_reason_for_call) 
{ 
case DLL_PROCESS_ATTACH: 
case DLL_THREAD_ATTACH: 
case DLL_THREAD_DETACH: 
case DLL_PROCESS_DETACH: 
    break; 
} 
return TRUE; 
} 


    #ifdef __cplusplus 
    extern "C" { 
    #endif /* __cplusplus */ 


    __declspec(dllexport) INT myDoSomething(short* M, short* N, short* image, int SizeX, int SizeY, short* imgOut){ 

// Alloc Memory 
Mat imgIn(SizeX, SizeY, CV_16S, &image[0]); 
Mat imOut(SizeX, SizeY, CV_16S, &imgOut[0]); 


// Clone Source Image 

imOut = imgIn.clone(); 

// Get size for DFT 

*M = getOptimalDFTSize(imgIn.rows); 
*N = getOptimalDFTSize(imgIn.cols); 

MatIterator_ it;// = imOut.begin<short>(); 

//for(int x=0;x<=SizeX;x++){ 

    //imgOut = imOut.at<short>(x,y); 
//} 

return 0; 
} 



#ifdef __cplusplus 
} 
#endif /* __cplusplus */ 

В LabView все правильно. VS ошибка:

Fehler 1 error C2955: "cv::MatIterator_": Für die Verwendung der template-Klasse ist eine template-Argumentliste erforderlich.

ответ

2

MatIterator_ шаблонный класс.

это именно то, что говорит об ошибке, вы должны указать тип (а также для начать() и конец()):

MatIterator_<short> it = imOut.begin<short>(); 
for (; it != imOut.end<short>(); ++it) 
{ 
    ... 
}