問題:
????????主機接入了多個USB攝像頭,傳統的OpenCv是用攝像頭插入usb的下標調取的,如過只接入一個攝像頭那直接使用capture.open(0);這種方式調用沒有任何問題,多個的話,就會出現問題,因為USB拔插時候對應攝像頭對應的下標會發(fā)生變化。
解決思路:
??????? 使用硬件設備的唯一標識,就是PID和VID來確定USB攝像頭的下標,這樣不管下標怎么變,我們都是通過PID和VID調起的,就成功解決我們的問題。
話不多說,直接上步驟:
一、首先查看硬件設備的PID/VID編號
??????? 我的電腦是win10這里只說明win10的步驟,其他系統自己百度怎么查看。
??????? 點擊此電腦-->管理-->設備管理器--->照相機--->點擊USB攝像頭屬性--->詳細信息---->硬件ID
就可以看到PID/VID編號了
????????
?
?
?二、添加動態(tài)庫
??????? 我也是看到大佬寫的改了一下,大佬只寫了python 和 C 的調用方法
??????? 大佬博客:根據攝像頭硬件標識VID&PID獲取OpenCV打開照相機所需參數index索引下標_MylesYYY的博客-CSDN博客_c++ cameraindex 怎么獲取
動態(tài)庫地址:
CvCameraIndex: 根據攝像頭硬件標識(如vid_1234&pid_4321)獲取OpenCV打開攝像頭時的參數下標index
這里我說明一下Java版本的
??????? 需要下載jna.jar添加到項目的環(huán)境中
代碼如下
import com.sun.jna.Library;
import com.sun.jna.Native;
public class OpenCv {
?? ?public interface CallMTScaleLibrary extends Library {
?? ??? ?CallMTScaleLibrary INSTANCE = Native.load("C:\\Users\\admin\\Desktop\\cv-camera-index-master\\cv-camera-index-master\\lib\\CvCameraIndex_x64", CallMTScaleLibrary.class);
?? ??? ??? ? //public int Transfer_Ethernet_EX(String filename, int key);
?? ??? ??? ? public? int getCameraIndex(String hwid) ;?? ??? ?
?? ??? ?}
?? ?public static void main(String[] args) {
?? ??? ?
?? ??? ?int n = CallMTScaleLibrary.INSTANCE.getCameraIndex("vid_0BC8&pid_5880");
?? ??? ?System.out.println("相機編號:"+n);
?? ?}
}
這樣我們就實現了Java 使用opencv調用指定的USB攝像頭文章來源:http://www.zghlxwxcb.cn/news/detail-653383.html
感謝閱讀,留個免費的小贊哦文章來源地址http://www.zghlxwxcb.cn/news/detail-653383.html
到了這里,關于Java + OpenCv 根據PID/VID調用指定攝像頭的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!