2016-03-04 1 views
0

У меня есть большая проблема с некоторых дней. Я создал в LabView пустое изображение размером 4096x4096 и хочу скопировать меньшее изображение в OpenCV. В результате я получаю каждый раз черное изображение.OpenCV LabView Скопировать изображение в крупную

Mat imgIn = Mat(SizeX, SizeY, CV_16U, &image[0]);   // Small pic 
Mat imOut = Mat(4096, 4096, CV_16U, &imgOut[0]); 

imgIn.copyTo(imOut(Rect(500, 500, imgIn.size().width, imgIn.size().height))); 

for(int i = 0;i < 4096;i++){ 
    for(int j = 0;j < 4096;j++){ 

     if((imOut.data[i,j])>300) *test += 1; 
     *imgOut++ = imOut.data[i,j]; 
    } 
} 

Вот мой новый VI от Labview:

Мой результат:

Update: после изменения кода:

Mat imgIn = Mat(SizeX, SizeY, CV_16U, &image[0]);   // Small pic 
Mat imOut = Mat(4096, 4096, CV_16U, &imgOut[0]); 

imgIn.copyTo(imOut(Rect(500, 500, imgIn.size().width, imgIn.size().height))); 

Pic:

Обновление 2 Код:

// --- 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(unsigned int *test, unsigned short *image, int SizeX, int SizeY, unsigned short *imgOut){ 

// Alloc Memory 
Mat imgIn = Mat(SizeX, SizeY, CV_16U, &image[0]);   // Small pic 
Mat imOut = Mat(4096, 4096, CV_16U, &imgOut[0]);   // Big pic 

imgIn.copyTo(imOut(Rect(1000, 1000, imgIn.size().width, imgIn.size().height))); 
+0

Код "copyTo" верен. Можете ли вы попробовать изменить 'imOut.data [i, j]' на 'imOut.at (i, j)'? Что такое 'imgOut' и' test'? – Miki

+0

Все равно никаких изменений, но я попробовал другой метод, который экономит время вычисления и проще. Единственная проблема заключается в том, что теперь изображение показано странным. – Xeno1987

+0

Пожалуйста, предоставьте [mcve], или мы можем только догадываться; D – Miki

ответ

1

проблема решена:

OpenCV лечит Матрицы не как в LabView, как X, Y (колонка, строка), но, как строка столбец!!

Mat imgIn = Mat(SizeY, SizeX, CV_16UC1, &image[0]); 
Смежные вопросы