国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【重明】機(jī)器視覺(jué)QT/C++實(shí)現(xiàn)工業(yè)相機(jī)二次開(kāi)發(fā)框架

這篇具有很好參考價(jià)值的文章主要介紹了【重明】機(jī)器視覺(jué)QT/C++實(shí)現(xiàn)工業(yè)相機(jī)二次開(kāi)發(fā)框架。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

工業(yè)相機(jī)二次開(kāi)發(fā)是機(jī)器視覺(jué)行業(yè)必不可少的技能之一。
而如何實(shí)現(xiàn)一個(gè)框架,能夠兼容所有工業(yè)相機(jī)二次開(kāi)發(fā),從而支持多種類(lèi)型的工業(yè)相機(jī),就是機(jī)器視覺(jué)行業(yè)的進(jìn)階技能了。
【重明】機(jī)器視覺(jué)QT/C++實(shí)現(xiàn)工業(yè)相機(jī)二次開(kāi)發(fā)框架,機(jī)器視覺(jué)項(xiàng)目,qt,c++,opencv,計(jì)算機(jī)視覺(jué),機(jī)器視覺(jué),圖像處理,工業(yè)相機(jī)
重明工業(yè)相機(jī)二次開(kāi)發(fā)項(xiàng)目就是在實(shí)現(xiàn)相機(jī)二開(kāi)框架的基礎(chǔ)上,完成了海康工業(yè)相機(jī)的二次開(kāi)發(fā)。
項(xiàng)目源碼下載地址:
https://www.roundvision.cc/softwaredevelopment/qt/chongming/
技術(shù)棧:
1、C++
2、 QT 5.14.2
3、Opencv 4.5.5
4、工業(yè)相機(jī)SDK二次開(kāi)發(fā)
重明工業(yè)相機(jī)二次開(kāi)發(fā)項(xiàng)目框架如下圖所示:
【重明】機(jī)器視覺(jué)QT/C++實(shí)現(xiàn)工業(yè)相機(jī)二次開(kāi)發(fā)框架,機(jī)器視覺(jué)項(xiàng)目,qt,c++,opencv,計(jì)算機(jī)視覺(jué),機(jī)器視覺(jué),圖像處理,工業(yè)相機(jī)
整個(gè)項(xiàng)目分前端部分的界面設(shè)計(jì),和后端部分的工業(yè)相機(jī)框架設(shè)計(jì)。

1、界面GUI實(shí)現(xiàn)

重明的界面實(shí)現(xiàn)非常簡(jiǎn)潔,主要為三個(gè)部分:
左側(cè)的相機(jī)列表,中間的圖像顯示,右側(cè)的相機(jī)參數(shù)屬性列表。
【重明】機(jī)器視覺(jué)QT/C++實(shí)現(xiàn)工業(yè)相機(jī)二次開(kāi)發(fā)框架,機(jī)器視覺(jué)項(xiàng)目,qt,c++,opencv,計(jì)算機(jī)視覺(jué),機(jī)器視覺(jué),圖像處理,工業(yè)相機(jī)
控制窗口的實(shí)現(xiàn)非常簡(jiǎn)單,其實(shí)就是一排按鈕加一個(gè)QListWidget列表,用來(lái)顯示所有檢測(cè)到的工業(yè)相機(jī)。
視覺(jué)窗口用來(lái)顯示圖像,采用QT的視圖模型框架,采用QGrapicsScene來(lái)實(shí)現(xiàn)的。
屬性窗口主要涉及到了QT的MVD框架,即Model-View-Delegate框架,模型-視圖-代理,通過(guò)視圖代理,完成了對(duì)各個(gè)不同屬性參數(shù)類(lèi)型的支持,完成了相機(jī)參數(shù)屬性Int,double,bool,cmd,string等多種類(lèi)型的顯示。

2、后端框架接口

實(shí)現(xiàn)了前端界面,現(xiàn)在我們可以考慮,如何抽象工業(yè)相機(jī)接口類(lèi),實(shí)現(xiàn)對(duì)不同工業(yè)相機(jī)的無(wú)差別接入,達(dá)到工業(yè)相機(jī)二次開(kāi)發(fā)框架的效果呢?
這里可以借用QT插件的便利性,來(lái)設(shè)計(jì)工業(yè)相機(jī)抽象插件接口:

 //相機(jī)接口類(lèi)
class CameraInterface
{
public:
	CameraInterface(const CameraMetaInfo& info)
	{
		m_cameraInfo = info;
	}
	virtual ~CameraInterface() {}
	//獲取相機(jī)用戶(hù)定義名稱(chēng)
	virtual std::string UserName()
	{
		return m_cameraInfo.UserDefineID;
	}
	//獲取相機(jī)序列號(hào)
	virtual std::string Serial()
	{
		return m_cameraInfo.Serial;
	}
	//獲取相機(jī)參數(shù)列表
	virtual uint32_t getParamList(std::vector<CameraParam>& paramList) = 0;
	//判斷相機(jī)是否連接
	virtual bool isConnect() = 0;
	//判斷相機(jī)是否拉流
	virtual bool isGrabbing() = 0;
	//初始化相機(jī)對(duì)象
	virtual uint32_t acquire() = 0;
	//釋放相機(jī)
	virtual uint32_t release() = 0;
	//連接相機(jī)
	virtual uint32_t connect() = 0;
	//斷開(kāi)連接
	virtual uint32_t disconnect() = 0;
	//創(chuàng)建拉流資源
	virtual uint32_t creatStream() = 0;
	//銷(xiāo)毀拉流資源
	virtual uint32_t destroyStream() = 0;
	//開(kāi)啟拉流
	virtual uint32_t startGrabbing() = 0;
	//停止拉流
	virtual uint32_t stopGrabbing() = 0;
	//導(dǎo)入配置文件
	virtual uint32_t loadConfig(const std::string path) = 0;
	//導(dǎo)出配置文件
	virtual uint32_t saveConfig(const std::string path) = 0;
	//獲取配置文件格式
	virtual std::string configFormat() = 0;
	//讀取相機(jī)參數(shù)
	virtual uint32_t readParam(CameraParam& param) = 0;
	//寫(xiě)入相機(jī)參數(shù)
	virtual uint32_t writeParam(CameraParam& param) = 0;
	//獲取實(shí)時(shí)圖像
	virtual uint32_t getImageLast(cv::Mat& image) = 0;
	//獲取圖像隊(duì)列
	virtual CameraImageQueue& ImageQueue()
	{
		return m_imageQueue;
	}

protected:
	CameraImageQueue m_imageQueue;//圖像隊(duì)列
	std::vector<CameraParam> m_cameraParams;//相機(jī)參數(shù)列表
	CameraMetaInfo m_cameraInfo;//相機(jī)元信息
};

通過(guò)抽象設(shè)計(jì)統(tǒng)一的相機(jī)行為接口,在通過(guò)層層封裝,即可達(dá)到框架效果。

如何實(shí)現(xiàn)相機(jī)圖像隊(duì)列

相機(jī)出圖速度是有差異的,而我們處理相機(jī)出圖也會(huì)有所耗時(shí),如果你是出一張圖像處理一張,然后再去拿一張圖像,那很容易造成丟幀的問(wèn)題。所以設(shè)計(jì)一個(gè)緩沖隊(duì)列是非常有必要的。

我們的圖像隊(duì)列內(nèi)部會(huì)包含兩個(gè)隊(duì)列,一個(gè)空閑隊(duì)列,一個(gè)工作隊(duì)列。
在我們相機(jī)圖像隊(duì)列這個(gè)應(yīng)用場(chǎng)景下,生產(chǎn)者就是相機(jī)SDK的回調(diào)函數(shù),該回調(diào)函數(shù)會(huì)生成相機(jī)的原始圖像數(shù)據(jù),我們?cè)诨卣{(diào)函數(shù)內(nèi)將原始圖像數(shù)據(jù)加入到隊(duì)列中。
加入到隊(duì)列是先看空閑隊(duì)列有沒(méi)有位置,如果有則加入到空閑隊(duì)列,然后觸發(fā)信號(hào)量激活消費(fèi)者。如果空閑隊(duì)列沒(méi)有位置,則從工作隊(duì)列取出最舊的圖像,將原始數(shù)據(jù)加入到該位置。
我們的消費(fèi)者,就是我們的取圖線程,我們軟件會(huì)不停的從隊(duì)列中的工作隊(duì)列中嘗試取出圖像,當(dāng)工作隊(duì)列為空時(shí),會(huì)阻塞在信號(hào)量中,當(dāng)生產(chǎn)者生產(chǎn)了一張圖像后,會(huì)激活該信號(hào)量使取圖線程取到圖像。
圖像隊(duì)列代碼實(shí)現(xiàn):


#define TIME_OUT_MS		5000	//取圖超時(shí)時(shí)間
#define ImageQueueSize	10		//圖像隊(duì)列長(zhǎng)度宏定義

class CameraImageQueue
{
public:
	CameraImageQueue();
	CameraImageQueue(int maxSize);
	//向圖像隊(duì)列中加入圖像
	uint32_t Put(const cv::Mat& m);
	//從圖像隊(duì)列中取出圖像
	uint32_t Take(cv::Mat& m);
	//隊(duì)列是否為空
	bool Empty();
	//隊(duì)列是否為滿
	bool Full();
	//隊(duì)列當(dāng)前長(zhǎng)度
	size_t Size();
private:
	bool isFull() const
	{
		bool full = workImageQueue.size() >= m_queueSize;
		return full;
	}

	bool isEmpty() const
	{
		bool empty = workImageQueue.empty();
		return empty;
	}

	bool NotFull() const
	{
		bool full = workImageQueue.size() >= m_queueSize;
		return !full;
	}

	bool NotEmpty() const
	{
		bool empty = workImageQueue.empty();
		return !empty;
	}

private:
	std::mutex m_mutex;
	std::condition_variable m_condition;
	std::queue<cv::Mat> freeImageQueue;//空閑隊(duì)列
	std::queue<cv::Mat> workImageQueue;//工作隊(duì)列

	uint8_t m_queueSize;
	bool m_needStop;
};

THE END

項(xiàng)目源碼下載地址:
https://www.roundvision.cc/softwaredevelopment/qt/chongming/
項(xiàng)目由豐富的視頻教程,見(jiàn)BiliBili:
【重明】機(jī)器視覺(jué)QT/C++實(shí)現(xiàn)工業(yè)相機(jī)二次開(kāi)發(fā)框架,機(jī)器視覺(jué)項(xiàng)目,qt,c++,opencv,計(jì)算機(jī)視覺(jué),機(jī)器視覺(jué),圖像處理,工業(yè)相機(jī)
視頻鏈接:https://www.bilibili.com/video/BV1pp4y1n7X9文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-785790.html

到了這里,關(guān)于【重明】機(jī)器視覺(jué)QT/C++實(shí)現(xiàn)工業(yè)相機(jī)二次開(kāi)發(fā)框架的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶(hù)投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 機(jī)器視覺(jué)工業(yè)相機(jī)和鏡頭選型

    機(jī)器視覺(jué)工業(yè)相機(jī)和鏡頭選型

    1、倍率=芯片尺寸(靶面)/視野----遠(yuǎn)心鏡頭選擇 2、焦距=倍率x相機(jī)高度(工作距離) 2、像素精度要求=檢查精度/(3-5)個(gè)像素 3、相機(jī)分辨率=視野/像素精度 4、芯片尺寸(靶面)=像元尺寸*相機(jī)分辨率 案例一(尺寸測(cè)量) 1、要求: ①機(jī)臺(tái)相對(duì)靜止不抖動(dòng),可以安裝背光源 ②

    2024年02月09日
    瀏覽(25)
  • 機(jī)器視覺(jué)_工業(yè)相機(jī)及相關(guān)配件選型

    機(jī)器視覺(jué)_工業(yè)相機(jī)及相關(guān)配件選型

    憑我的經(jīng)驗(yàn),一般能帶上工業(yè)兩字的,和日常版最大的區(qū)別就是更穩(wěn)定、抗干擾能力更強(qiáng)(高溫、高壓、防塵、防水、防爆、抗電磁干擾等;列舉這么多,并不意味著必須帶有這些功能,這些功能通常是可定制的),當(dāng)然還有其他特點(diǎn),比如接口可擴(kuò)展、定制性比較強(qiáng)等。

    2024年02月13日
    瀏覽(24)
  • 機(jī)器視覺(jué)??倒I(yè)相機(jī)SDK參數(shù)設(shè)置獲取

    機(jī)器視覺(jué)海康工業(yè)相機(jī)SDK參數(shù)設(shè)置獲取

    視覺(jué)人機(jī)器視覺(jué)培訓(xùn)-缺陷檢測(cè)項(xiàng)目-食品行業(yè)草雞蛋外觀檢測(cè) 相機(jī)參數(shù)類(lèi)型可分為六類(lèi),除 command 參數(shù)外,每一類(lèi)都有其對(duì)應(yīng)的設(shè)置與獲取函數(shù)接口。 表 1 參數(shù)類(lèi)型及對(duì)應(yīng)函數(shù)接口介紹 *詳細(xì)函數(shù)接口可參考 SDK 手冊(cè): ?C:Program Files (x86)MVSDevelopmentDocumentations 相機(jī)參數(shù)類(lèi)型

    2024年02月07日
    瀏覽(53)
  • 機(jī)器視覺(jué)之Basler工業(yè)相機(jī)使用和配置方法(C++)

    機(jī)器視覺(jué)之Basler工業(yè)相機(jī)使用和配置方法(C++)

    basler工業(yè)相機(jī)做雙目視覺(jué)用,出現(xiàn)很多問(wèn)題記錄一下: 首先是多看手冊(cè):https://zh.docs.baslerweb.com/software 手冊(cè)內(nèi)有所有的源碼和參考示例,實(shí)際上在使用過(guò)程中,大部分都是這些源碼,具體項(xiàng)目選擇對(duì)應(yīng)的示例代碼。 可以通過(guò)balser的鏡頭選型工具,按照自己需要測(cè)量目標(biāo)的距

    2024年02月07日
    瀏覽(51)
  • Linux下??低暪I(yè)相機(jī)的SDK二次開(kāi)發(fā)

    Linux下??低暪I(yè)相機(jī)的SDK二次開(kāi)發(fā)

    1.1安裝包的下載和解壓 去 官網(wǎng) 下載兩個(gè)軟件安裝,分別是客戶(hù)端和開(kāi)發(fā)環(huán)境。 (這里我們下載V2.1.1(Linux)和Runtime組件包(Linux)): 工業(yè)相機(jī)文檔/安裝包中的不同安裝版本安裝包里有各個(gè)系統(tǒng)及arm開(kāi)發(fā)板使用的安裝包,選擇相應(yīng)的安裝包進(jìn)行安裝 (這里我們選擇最后一

    2024年02月09日
    瀏覽(23)
  • 基于halcon實(shí)現(xiàn)視覺(jué)定位框架(C#做主算法,C#、MFC、Qt二次開(kāi)發(fā))【附源碼】

    基于halcon實(shí)現(xiàn)視覺(jué)定位框架(C#做主算法,C#、MFC、Qt二次開(kāi)發(fā))【附源碼】

    本文主要實(shí)現(xiàn)halcon二次開(kāi)發(fā),基于C#做視覺(jué)算法的編輯,已C#做用戶(hù)空間,然后使用C#、C++(MFC、Qt)分別實(shí)現(xiàn)調(diào)用,從而實(shí)現(xiàn)多相機(jī)的使用。 換句話說(shuō)就是:C#做算法及主界面開(kāi)發(fā),然后把生成的控件dll移交給C#或者M(jìn)FC或者QT進(jìn)行二次調(diào)用實(shí)現(xiàn)二次開(kāi)發(fā),這里主要想展示的是多

    2024年01月19日
    瀏覽(56)
  • 基于康耐視cognexVisionpro用C#二次開(kāi)發(fā)的多相機(jī)視覺(jué)對(duì)位框架

    基于康耐視cognexVisionpro用C#二次開(kāi)發(fā)的多相機(jī)視覺(jué)對(duì)位框架

    基于康耐視cognexVisionpro用C#二次開(kāi)發(fā)的多相機(jī)視覺(jué)對(duì)位框架 支持1:多相機(jī)對(duì)位邏輯運(yùn)算,旋轉(zhuǎn)標(biāo)定坐標(biāo)關(guān)聯(lián)運(yùn)算(可供參考學(xué)習(xí))可以協(xié)助理解做對(duì)位貼合項(xiàng)目思路。 支持2:直接連接運(yùn)動(dòng)控制卡,控制UVW平臺(tái)運(yùn)動(dòng)(可供參考學(xué)習(xí)) 支持3:自動(dòng)標(biāo)定程序設(shè)定(可供參考學(xué)習(xí)

    2024年04月15日
    瀏覽(18)
  • (一)Qt+OpenCV調(diào)用??倒I(yè)相機(jī)SDK示例開(kāi)發(fā)

    (一)Qt+OpenCV調(diào)用??倒I(yè)相機(jī)SDK示例開(kāi)發(fā)

    提示:這里是該系列文章的所有文章的目錄 第一章: (一)Qt+OpenCV調(diào)用??倒I(yè)相機(jī)SDK示例開(kāi)發(fā) 第二章: (二)Qt多線程實(shí)現(xiàn)??倒I(yè)相機(jī)圖像實(shí)時(shí)采集 近期在Qt環(huán)境下進(jìn)行??倒I(yè)相機(jī)的使用開(kāi)發(fā),發(fā)現(xiàn)??堤峁┑氖纠龥](méi)有Qt的demo,而其中有基于MFC框架的示例,所以在這

    2024年02月03日
    瀏覽(150)
  • Dalsa線掃相機(jī)-二次開(kāi)發(fā)-QT-C++ 可用Demo(一)

    Dalsa線掃相機(jī)-二次開(kāi)發(fā)-QT-C++ 可用Demo(一)

    ???????Dalsa線掃描相機(jī)的二次開(kāi)發(fā),因?yàn)楣俜街挥蠱FC和命令行版本的,我需要使用QT進(jìn)行開(kāi)發(fā),于是自己花時(shí)間研究,然后寫(xiě)了一個(gè),效果如下: ? ? ? ? 可能GIF動(dòng)圖有點(diǎn)模糊,在圖片中,上面為實(shí)時(shí)畫(huà)面,我使用的是4096*128分辨率,然后使用手機(jī)的閃光燈在相機(jī)旁邊搖晃

    2024年02月05日
    瀏覽(111)
  • (二)Qt多線程實(shí)現(xiàn)??倒I(yè)相機(jī)圖像實(shí)時(shí)采集

    (二)Qt多線程實(shí)現(xiàn)??倒I(yè)相機(jī)圖像實(shí)時(shí)采集

    提示:這里是該系列文章的所有文章的目錄 第一章: (一)Qt+OpenCV調(diào)用海康工業(yè)相機(jī)SDK示例開(kāi)發(fā) 第二章: (二)Qt多線程實(shí)現(xiàn)??倒I(yè)相機(jī)圖像實(shí)時(shí)采集 本文主要講述了使用Qt多線程實(shí)現(xiàn)??倒I(yè)相機(jī)圖像的采集,并在界面上將兩個(gè)相機(jī)采集到的圖像信息同時(shí)顯示出來(lái),在

    2024年02月04日
    瀏覽(84)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包