C# call opencv,回傳目前電腦多少台攝影機設備

[DllImport(“opencv_videoio341.dll", CallingConvention = CallingConvention.Cdecl)]
internal static extern void cvReleaseCapture(ref IntPtr index);

[DllImport(“opencv_videoio341.dll", CallingConvention = CallingConvention.Cdecl)]
internal static extern IntPtr cvCreateCameraCapture(int index);

public static int GetCameraCount() {

int camDeviceCount = 0;
IntPtr camIntPtr = IntPtr.Zero;
while (true)
{
try
{
camIntPtr = cvCreateCameraCapture(camDeviceCount);
if (camIntPtr == IntPtr.Zero)
break;
else
{
camDeviceCount++;
cvReleaseCapture(ref camIntPtr);
}
}
catch (Exception)
{
camDeviceCount = 0;
return camDeviceCount;
}
}
cvReleaseCapture(ref camIntPtr);
return camDeviceCount;
}

如果出現
System.DllNotFoundException: ‘無法載入 DLL ‘opencv_videoio341.dll’: 找不到指定的模組。
可以設環境變數Path指定到你opencv安裝的地方。
環境變數設完記得重開機,.net才會重抓設定。

並不是單只要把opencv_videoio341.dll這個檔案與你的專案放一起而已。
‘無法載入 DLL ‘opencv_videoio341.dll’
這種錯誤訊息會讓人誤會
明明就放opencv_videoio341.dll了啊!
其實只要它參考的其它dll也沒有一併放一起,一樣是丟出例外
‘無法載入 DLL ‘opencv_videoio341.dll’: 找不到指定的模組。
so…opencv_videoio341.dll有參考別的dll也請與你的專案放一起。

有安裝Visual Studio,你可以使用dumpbin.exe來看某個dll又依賴於哪些dll
如以下指令:
“C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.14.26428\bin\Hostx86\arm\dumpbin.exe" /DEPENDENTS opencv_videoio341.dll

可以看見除了windows內建的dll外,它還參考了
opencv_imgcodecs341.dll
opencv_imgproc341.dll
opencv_core341.dll
那不如將全部opencv的dll放到專案中還比較保險點。
它依賴的其它模組沒有齊全一樣是丟
‘無法載入 DLL ‘opencv_videoio341.dll’ : 找不到指定的模組。

廣告

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com 標誌

您的留言將使用 WordPress.com 帳號。 登出 /  變更 )

Google+ photo

您的留言將使用 Google+ 帳號。 登出 /  變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 /  變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 /  變更 )

連結到 %s