欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

利用golang進(jìn)行OpenCV學(xué)習(xí)和開發(fā)的步驟

 更新時(shí)間:2018年09月04日 09:23:18   作者:Mellong  
目前,OpenCV逐步成為一個(gè)通用的基礎(chǔ)研究和產(chǎn)品開發(fā)平臺(tái),下面這篇文章主要給大家介紹了關(guān)于利用golang進(jìn)行OpenCV學(xué)習(xí)和開發(fā)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下

前言

記得開始使用 OpenCV 的時(shí)候是在大學(xué)時(shí)期,當(dāng)時(shí)用的是 C 語言,OpenCV 版本好像是1.1,隨著時(shí)間的推移,后面 C++逐漸代替了 C,iOS 也有整合好的 lib 可以使用 OpenCV,現(xiàn)在Python, go 等語言進(jìn)行開發(fā),今天主要是說一說如何使用 go 語言配置開發(fā) OpenCV。

OpenCV這一名稱包含了Open和 Computer Vision兩者的意思。實(shí)際上,Open指Open Source(開源,即開放源代碼),Computer Vision則指計(jì)算機(jī)視覺。OpenCV的發(fā)展對(duì)軟件的開發(fā)具有重要影響。

OpenCV作為開放的數(shù)字圖像處理和計(jì)算機(jī)視覺軟件平臺(tái),有以下特點(diǎn):

① 開放C源碼。

② 基于Intel處理器指令集開發(fā)的優(yōu)化代碼。

③ 統(tǒng)一的結(jié)構(gòu)和功能定義。

④ 強(qiáng)大的圖像和矩陣運(yùn)算能力。

⑤ 方便靈活的用戶接口。

⑥ 同時(shí)支持MSWindows和Linux平臺(tái)。

作為一個(gè)基本的計(jì)算機(jī)視覺、圖像處理和模式識(shí)別的開源項(xiàng)目,OpenCV可以直接應(yīng)用于很多領(lǐng)域,作為二次開發(fā)的理想工具。

庫的選擇

使用 Opencv 2+的話,可以用這個(gè)庫 https://github.com/go-opencv/go-opencv,但這個(gè)庫沒有支持 OpenCV 3+, 所以想用 OpenCV 3+ 可以使用https://github.com/hybridgroup/gocv,今天主要就是介紹 gocv 的使用。

環(huán)境配置

如果還沒安裝 OpenCV 的話, Mac OS可以通過 brew install opencv 進(jìn)行安裝OpenCV 3.4.1。

安裝好 go 之后,直接運(yùn)行 go get -u -d gocv.io/x/gocv 命令獲取 gocv 庫,進(jìn)入該庫根目錄 cd $GOPATH/src/gocv.io/x/gocv, 運(yùn)行 source ./env.sh,然后就可以使用 go run命令運(yùn)行里面的示例了,剛開始學(xué)可以直接在示例里面修改代碼運(yùn)行。

IDE 的選擇

本來想使用 IDEA + go plugin 的方式來開發(fā),誰知 IDEA 出了 go IDE(需要收費(fèi)),go plugin 就停止維護(hù)了,只能放棄,隨后選擇 vscode+plugin 的方式,方便快捷,感覺也不錯(cuò),智能提示和代碼跳轉(zhuǎn)都有了,調(diào)試還沒試,估計(jì)調(diào)試和 run 的話都是可以配置的。

示例

配置好之后迫不及待就寫代碼了,由于 gocv 對(duì) OpenCV 進(jìn)行了封裝,方法名基本都一致,但是使用上還是有些區(qū)別,不過 vscode 代碼跳轉(zhuǎn)很方便,不清楚直接跳到源碼看看就知道了,下面貼一個(gè)查找邊框的例子,看看是不是和 C++的寫法很不一樣。

// What it does:
//
// This example uses the Window class to open an image file, and then display
// the image in a Window class.
//
// How to run:
//
// go run ./cmd/showimage/main.go /home/ron/Pictures/mcp23017.jpg
//
// +build example

package main

import (
 "fmt"
 "image"
 "image/color"
 "os"

 "gocv.io/x/gocv"
)

func main() {
 if len(os.Args) < 2 {
 fmt.Println("How to run:\n\tshowimage [imgfile]")
 return
 }

 filename := os.Args[1]
 window := gocv.NewWindow("Hello")
 img := gocv.IMRead(filename, gocv.IMReadColor)
 grayImage := gocv.NewMat()
 defer grayImage.Close()

 gocv.CvtColor(img, &grayImage, gocv.ColorBGRToGray)
 destImage := gocv.NewMat()
 gocv.Threshold(grayImage, &destImage, 100, 255, gocv.ThresholdBinaryInv)
 resultImage := gocv.NewMatWithSize(500, 400, gocv.MatTypeCV8U)

 gocv.Resize(destImage, &resultImage, image.Pt(resultImage.Rows(), resultImage.Cols()), 0, 0, gocv.InterpolationCubic)
 gocv.Dilate(resultImage, &resultImage, gocv.NewMat())
 gocv.GaussianBlur(resultImage, &resultImage, image.Pt(5, 5), 0, 0, gocv.BorderWrap)
 results := gocv.FindContours(resultImage, gocv.RetrievalTree, gocv.ChainApproxSimple)
 imageForShowing := gocv.NewMatWithSize(resultImage.Rows(), resultImage.Cols(), gocv.MatChannels4)
 for index, element := range results {
 fmt.Println(index)
 gocv.DrawContours(&imageForShowing, results, index, color.RGBA{R: 0, G: 0, B: 255, A: 255}, 1)
 gocv.Rectangle(&imageForShowing,
 gocv.BoundingRect(element),
 color.RGBA{R: 0, G: 255, B: 0, A: 100}, 1)
 }

 if img.Empty() {
 fmt.Println("Error reading image from: %v", filename)
 return
 }

 for {
 window.IMShow(imageForShowing)
 if window.WaitKey(1) >= 0 {
 break
 }
 }
}

我是用 showimage.go 這個(gè)示例改的,處理順序是:

  • 灰度化 CvtColor
  • 二值化 Threshold
  • 縮小圖片 Resize
  • 膨脹 Dilate
  • 高斯模糊 GaussianBlur
  • 查找輪廓 FindContours
  • 繪制輪廓 DrawContours
  • 繪制輪廓的最小外接矩形 Rectangle

從上面例子可以看到,方法都是在 package gocv下,使用的時(shí)候會(huì)有代碼提示,包括參數(shù)也有提示,由于 go 沒有類構(gòu)造方法,都是使用 New+類型名稱這樣的函數(shù)還創(chuàng)建類型。

我也是 go 的新手,這里是邊看著文檔邊寫的代碼,還好有智能代碼提示,用起來還算得心應(yīng)手,希望這篇入門文章對(duì)想使用 go 來進(jìn)行 OpenCV 開發(fā)的同學(xué)有所幫助。

總結(jié):

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問大家可以留言交流,謝謝大家對(duì)腳本之家的支持。

相關(guān)文章

  • Golang中tinyrpc框架的源碼解讀詳解

    Golang中tinyrpc框架的源碼解讀詳解

    tinyrpc是一個(gè)高性能的基于protocol?buffer的rpc框架。項(xiàng)目代碼非常少,很適合初學(xué)者進(jìn)行g(shù)olang的學(xué)習(xí)。本文將從源碼的角度帶大家了解tinyrpc框架的使用,需要的可以參考一下
    2023-01-01
  • Go語言線程安全之互斥鎖與讀寫鎖

    Go語言線程安全之互斥鎖與讀寫鎖

    這篇文章主要介紹了Go語言線程安全之互斥鎖與讀寫鎖,互斥鎖是為了并發(fā)的安全,在多個(gè)goroutine共同工作的時(shí)候,對(duì)于共享的數(shù)據(jù)十分不安全,而讀寫鎖效率革命,使用鎖的時(shí)候,安全與效率往往需要互相轉(zhuǎn)換,下文詳細(xì)內(nèi)容,需要的小伙伴可以參考一下
    2022-02-02
  • golang程序進(jìn)度條實(shí)現(xiàn)示例詳解

    golang程序進(jìn)度條實(shí)現(xiàn)示例詳解

    這篇文章主要為大家介紹了golang程序?qū)崿F(xiàn)進(jìn)度條示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • 利用Golang解析json數(shù)據(jù)的方法示例

    利用Golang解析json數(shù)據(jù)的方法示例

    Go提供了原生的JSON庫,并且與語言本身有效的集成在了一起。下面這篇文章將給大家介紹關(guān)于利用Golang解析json數(shù)據(jù)的方法,文中給出了詳細(xì)的示例代碼供大家參考學(xué)習(xí),需要的朋友們下面跟著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-07-07
  • vscode搭建go開發(fā)環(huán)境案例詳解

    vscode搭建go開發(fā)環(huán)境案例詳解

    對(duì)于Visual Studio Code開發(fā)工具,有一款優(yōu)秀的GoLang插件,今天通過本文給大家介紹下vscode搭建go開發(fā)環(huán)境的詳細(xì)教程,感興趣的朋友跟隨小編一起看看吧
    2021-12-12
  • Go語言如何并發(fā)超時(shí)處理詳解

    Go語言如何并發(fā)超時(shí)處理詳解

    大家都知道golang并沒有在語言層次上提供超時(shí)操作,但可以通過一些小技巧實(shí)現(xiàn)超時(shí)。下面來一起看看吧,有需要的朋友們可以參考借鑒。
    2016-09-09
  • 使用dep 配置golang 開發(fā)環(huán)境的操作方法

    使用dep 配置golang 開發(fā)環(huán)境的操作方法

    下面小編就為大家?guī)硪黄褂胐ep 配置golang 開發(fā)環(huán)境的操作方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-09-09
  • Win7環(huán)境下搭建Go開發(fā)環(huán)境(基于VSCode編輯器)

    Win7環(huán)境下搭建Go開發(fā)環(huán)境(基于VSCode編輯器)

    這篇文章主要介紹了Win7環(huán)境下搭建Go開發(fā)環(huán)境(基于VSCode編輯器),需要的朋友可以參考下
    2017-02-02
  • golang簡易實(shí)現(xiàn)?k8s?的yaml上傳并應(yīng)用示例方案

    golang簡易實(shí)現(xiàn)?k8s?的yaml上傳并應(yīng)用示例方案

    這篇文章主要為大家介紹了golang簡易實(shí)現(xiàn)?k8s?的yaml上傳并應(yīng)用示例方案,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-07-07
  • Go基礎(chǔ)語法的使用

    Go基礎(chǔ)語法的使用

    本文主要介紹了Go基礎(chǔ)語法的使用,包括標(biāo)識(shí)符、關(guān)鍵字、行分隔符、var關(guān)鍵字、:=運(yùn)算符、空格、注釋、package、import、輸入輸出、運(yùn)算符、條件控制、循環(huán)等,感興趣的可以了解一下
    2023-11-11

最新評(píng)論