zoukankan      html  css  js  c++  java
  • C++ 枚举摄像头

    C++ 枚举摄像头

    转至https://www.cnblogs.com/herd/p/9277402.html

    #include<iostream>
    #include <strmif.h>
    #include <initguid.h>
    #include<vector>
    #include<string>
    
    #pragma comment(lib, "setupapi.lib")
    
    using namespace std;
    
    #define VI_MAX_CAMERAS 20
    DEFINE_GUID(CLSID_SystemDeviceEnum, 0x62be5d10, 0x60eb, 0x11d0, 0xbd, 0x3b, 0x00, 0xa0, 0xc9, 0x11, 0xce, 0x86);
    DEFINE_GUID(CLSID_VideoInputDeviceCategory, 0x860bb310, 0x5d01, 0x11d0, 0xbd, 0x3b, 0x00, 0xa0, 0xc9, 0x11, 0xce, 0x86);
    DEFINE_GUID(IID_ICreateDevEnum, 0x29840822, 0x5b84, 0x11d0, 0xbd, 0x3b, 0x00, 0xa0, 0xc9, 0x11, 0xce, 0x86);
    
    //列出硬件设备
    int listDevices(vector<string>& list)
    {
    	ICreateDevEnum* pDevEnum = NULL;
    	IEnumMoniker* pEnum = NULL;
    	int deviceCounter = 0;
    	CoInitialize(NULL);
    
    	HRESULT hr = CoCreateInstance(
    		CLSID_SystemDeviceEnum,
    		NULL,
    		CLSCTX_INPROC_SERVER,
    		IID_ICreateDevEnum,
    		reinterpret_cast<void**>(&pDevEnum)
    	);
    
    	if (SUCCEEDED(hr))
    	{
    		hr = pDevEnum->CreateClassEnumerator(CLSID_VideoInputDeviceCategory, &pEnum, 0);
    		if (hr == S_OK) {
    
    			IMoniker* pMoniker = NULL;
    			while (pEnum->Next(1, &pMoniker, NULL) == S_OK)
    			{
    				IPropertyBag* pPropBag;
    				hr = pMoniker->BindToStorage(0, 0, IID_IPropertyBag,
    					(void**)(&pPropBag));
    
    				if (FAILED(hr)) {
    					pMoniker->Release();
    					continue; // Skip this one, maybe the next one will work.
    				}
    
    				VARIANT varName;
    				VariantInit(&varName);
    				hr = pPropBag->Read(L"Description", &varName, 0);
    				if (FAILED(hr))
    				{
    					hr = pPropBag->Read(L"FriendlyName", &varName, 0);
    				}
    
    				if (SUCCEEDED(hr))
    				{
    					hr = pPropBag->Read(L"FriendlyName", &varName, 0);
    					int count = 0;
    					char tmp[255] = { 0 };
    					while (varName.bstrVal[count] != 0x00 && count < 255)
    					{
    						tmp[count] = (char)varName.bstrVal[count];
    						count++;
    					}
    					list.push_back(tmp);
    				}
    
    				pPropBag->Release();
    				pPropBag = NULL;
    				pMoniker->Release();
    				pMoniker = NULL;
    
    				deviceCounter++;
    			}
    
    			pDevEnum->Release();
    			pDevEnum = NULL;
    			pEnum->Release();
    			pEnum = NULL;
    		}
    	}
    	return deviceCounter;
    }
    
    
    
    int main()
    {
    	vector<string> CameraName;//存储摄像头名称
    	int num = listDevices(CameraName);
    	cout << "摄像头个数:" << num << endl;
    	for (int i = 0; i < num; i++) {
    		cout << " ID: " << i << " : " << " Name: " << CameraName[i] << endl;
    	}
    
    	//waitKey(0);
    	system("pause");
    	return 0;
    }
    

    C#枚举摄像头

    nuget添加Aforge.Video.DirectShow引用或者Accord.Video.DirectShow

     FilterInfoCollection f = new FilterInfoCollection(FilterCategory.VideoInputDevice);
    foreach(FilterInfo item in f)
    {
        Console.WriteLine(item.Name);
    }
    
  • 相关阅读:
    函数
    数值
    数据类型
    jQuery工具方法
    jQuery概述
    史上最全的SpringMVC学习笔记
    webpack-Hot Module Replacement(热更新)
    webpack-Manifest
    webpack-Targets(构建目标)
    webpack-Dependency Graph(依赖图)
  • 原文地址:https://www.cnblogs.com/zzr-stdio/p/14732420.html
Copyright © 2011-2022 走看看