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)));
Код "copyTo" верен. Можете ли вы попробовать изменить 'imOut.data [i, j]' на 'imOut.at (i, j)'? Что такое 'imgOut' и' test'? – Miki
Все равно никаких изменений, но я попробовал другой метод, который экономит время вычисления и проще. Единственная проблема заключается в том, что теперь изображение показано странным. – Xeno1987
Пожалуйста, предоставьте [mcve], или мы можем только догадываться; D – Miki