2016-03-04 109 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]; 
    } 
} 

這裏我從LabVIEW VI新:

我的結果:

更新:更新的代碼之後:

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))); 

圖:

更新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把矩陣不象在像X,Y(列,行)的LabView,但作爲行列!!

Mat imgIn = Mat(SizeY, SizeX, CV_16UC1, &image[0]); 
相關問題