opencv和單片機通信?

opencv怎麼發給單片機數據?第一次接觸,網上也沒有資料,基於PC的opencv與STM32通信


做過幾年嵌入式開發。

opencv本身不負責通信,比如訪問攝像頭也是調用驅動的。

PC跟單片機通信常見介面是USB和串口。串口在開發上很簡單,兩端都有很多現成的軟體介面可以用。但是USB就要求你要自己懂得配置,寫描述符。比如你想把它描述成一個網路攝像頭,就按攝像頭那個協議來描述自己,這樣在插入PC之後,PC這邊就能識別出你這個設備是一個攝像頭設備,然後你用opencv就能用現成的介面去訪問圖像數據了。當然,你單片機這邊也要像攝像頭那樣上傳數據,具體的就是PC這邊每次讀數據都會問一下,然後這邊就進中斷了,你在中斷里寫好怎麼封裝數據包上傳,就可以了。這部分是有半成品的庫的,直接從ST官網上下載常式來仿著寫就行了。除了攝像頭這個類,還可以描述成滑鼠、遊戲手柄之類的屬於HID的類,這種又相對簡單一些,用於數據量不大的主要是控制性質的通信。你還可以描述成自定義的方式,這就麻煩了,因為PC端的驅動也要自己寫,我只是實驗成功過,沒有在工作中大量使用過,不是非常有必要這樣做,一般通用的這些類型都是夠大多數常見設備類型用的了。

總的來說,你想用USB的話,自己寫的話,就要詳細看一下USB協議。這個協議還是比較大的,我當時看了一天文檔,用了好久才熟。

你的問題是問怎麼發數據給單片機,我猜你是控制性質的應用場景,這樣的話,我還是建議走HID類型。然後PC這邊在應用層寫一個簡單的適合你自己應用的SDK。

另外,一個設備是可以有多個描述的,比如既是一個滑鼠又是一個攝像頭,對PC來說,它會以為這個USB上面插著兩個設備的,你直接把它們當成不同的設備來用就行了。

嵌入式端開發USB的書,推薦一本《圈圈教你玩USB》,作者是我以前一位同事。

串口開發是很方便,但是要看實際產品的功能定義了。如果是學校的東西隨便弄的話,用串口也是非常好的,因為開發起來真的簡單太多了。如果是實際的產品,就看產品定義給不給加一個串口吧,畢竟多一個串口的連接,成本多了,外觀不美觀,結構設計可能還不能兼容,很多問題。USB一般都有的嘛,供電和通信都包了。還是看你實際的產品定義。


OpenCV是專門用來做圖像處理的開發包,不是操作系統,不是神,不是什麼都能幹。PC通過串口和單片機通信,應該知道吧,OpenCV沒有封裝什麼通信功能。你的軟體應該是用OpenCV做圖像處理,得到一些結果,然後你的軟體再用串口和串口通信函數和單片機進行通信。不知道你是不是想這樣?


如果是通過RS-232串口通信,且上位機是Windows,用VC編程,有個CSerialPort類挺好用的,liquanhai/CSerialPort · GitHub,下位機單片機通信也有例子的,可搜一搜。


樓上說的對,Opencv無法向單片機發數據,據我所知,它內部沒有封裝串口之類的函數介面,所以只能是你在VC或其他工具中使用相關的API函數來和串口通信。


樓主是用opencv寫一個程序在上位機上運行 然後將返回值 通過串口通信輸給單片機嗎?


用socket啊,opencv一般只用於調用庫圖像處理的,比如你整體語言是java,用java.socket實現與STM32通信啊


vs跟單片機通信,opencv只是圖像處理函數庫。


推薦閱讀:

新鮮出爐!數字信號處理思維導圖!
通信保研去向?
如何看待移動4G套餐的定價標準?
千萬別干核心網!
賣木漿起家,還造過子彈,這個曾經的手機霸主,到底還有多少秘密?

TAG:通信 | 單片機 | OpenCV |