引用诗句是句号用法:GO语言中使用OpenCV

来源:百度文库 编辑:偶看新闻 时间:2024/04/29 13:07:01

GO语言绑定

项目主页: http://code.google.com/p/go-opencv/

BBS讨论: http://www.opencv.org.cn/forum/viewtopic.php?f=1&t=9145

Debian下安装:

  1. 安装OpenCV开发包
  2. 安装go语言环境, 参考 http://golang.org 官方文档
  3. svn下载最新go-opencv代码
    1. cd go-opencv
    2. make install
    3. make hellocv
    4. ./hellocv
    5. cd go-opencv/samples
    6. make
    7. ./edge
    8. ./inpaint

目前完成了部分, 窗口的例子如下:

// Copyright 2011 . All rights reserved.// Use of this source code is governed by a BSD-style// license that can be found in the LICENSE file.package mainimport ("fmt""opencv""os")func main() {filename := "./samples/lena.jpg"if len(os.Args) == 2 {filename = os.Args[1]}image := opencv.LoadImage(filename)if image == nil {panic("LoadImage fail")}defer image.Release()win := opencv.NewWindow("Go-OpenCV")defer win.Destroy()win.SetMouseCallback(func(event, x, y, flags int) {fmt.Printf("event = %d, x = %d, y = %d, flags = %d\n",event, x, y, flags,)})win.CreateTrackbar("Thresh", 1, 100, func(pos int) {fmt.Printf("pos = %d\n", pos)})win.ShowImage(image)opencv.WaitKey(0)}
[编辑]

例子: samples/edge

http://code.google.com/p/go-opencv/wiki/edge

// Copyright 2011 . All rights reserved.// Use of this source code is governed by a BSD-style// license that can be found in the LICENSE file.package mainimport ("fmt""opencv""os")func main() {filename := "./lena.jpg"if len(os.Args) == 2 {filename = os.Args[1]}image := opencv.LoadImage(filename)if image == nil {panic("LoadImage fail")}defer image.Release()w := image.Width()h := image.Height()// Create the output imagecedge := opencv.CreateImage(w, h, opencv.IPL_DEPTH_8U, 3)defer cedge.Release()// Convert to grayscalegray := opencv.CreateImage(w, h, opencv.IPL_DEPTH_8U, 1)edge := opencv.CreateImage(w, h, opencv.IPL_DEPTH_8U, 1)defer gray.Release()defer edge.Release()opencv.CvtColor(image, gray, opencv.CV_BGR2GRAY)win := opencv.NewWindow("Edge")defer win.Destroy()win.SetMouseCallback(func(event, x, y, flags int, param ...interface{}) {fmt.Printf("event = %d, x = %d, y = %d, flags = %d\n",event, x, y, flags,)})win.CreateTrackbar("Thresh", 1, 100, func(pos int, param ...interface{}) {edge_thresh := posopencv.Smooth(gray, edge, opencv.CV_BLUR, 3, 3, 0, 0)opencv.Not(gray, edge)// Run the edge detector on grayscaleopencv.Canny(gray, edge, float64(edge_thresh), float64(edge_thresh*3), 3)opencv.Zero(cedge)// copy edge pointsopencv.Copy(image, cedge, edge)win.ShowImage(cedge)fmt.Printf("pos = %d\n", pos)})win.ShowImage(image)for {key := opencv.WaitKey(20)if key == 27 {os.Exit(0)}}os.Exit(0)}
[编辑]

例子: samples/inpaint

http://code.google.com/p/go-opencv/wiki/inpaint

// Copyright 2011 . All rights reserved.// Use of this source code is governed by a BSD-style// license that can be found in the LICENSE file.package mainimport ("fmt""opencv""os")func main() {filename := "./fruits.jpg"if len(os.Args) == 2 {filename = os.Args[1]}img0 := opencv.LoadImage(filename)if img0 == nil {panic("LoadImage fail")}defer img0.Release()fmt.Print("Hot keys: \n","\tESC - quit the program\n","\tr - restore the original image\n","\ti or ENTER - run inpainting algorithm\n","\t\t(before running it, paint something on the image)\n",)img := img0.Clone()inpainted := img0.Clone()inpaint_mask := opencv.CreateImage(img0.Width(), img0.Height(), 8, 1)opencv.Zero(inpaint_mask)//opencv.Zero( inpainted )win := opencv.NewWindow("image")defer win.Destroy()prev_pt := opencv.Point{-1, -1}win.SetMouseCallback(func(event, x, y, flags int, param ...interface{}) {if img == nil {os.Exit(0)}if event == opencv.CV_EVENT_LBUTTONUP ||(flags&opencv.CV_EVENT_FLAG_LBUTTON) == 0 {prev_pt = opencv.Point{-1, -1}} else if event == opencv.CV_EVENT_LBUTTONDOWN {prev_pt = opencv.Point{x, y}} else if event == opencv.CV_EVENT_MOUSEMOVE &&(flags&opencv.CV_EVENT_FLAG_LBUTTON) != 0 {pt := opencv.Point{x, y}if prev_pt.X < 0 {prev_pt = pt}rgb := opencv.ScalarAll(255.0)opencv.Line(inpaint_mask, prev_pt, pt, rgb, 5, 8, 0)opencv.Line(img, prev_pt, pt, rgb, 5, 8, 0)prev_pt = ptwin.ShowImage(img)}})win.ShowImage(img)opencv.WaitKey(0)win2 := opencv.NewWindow("inpainted image")defer win2.Destroy()win2.ShowImage(inpainted)for {key := opencv.WaitKey(20)if key == 27 {os.Exit(0)} else if key == int("r"[0]) {opencv.Zero(inpaint_mask)opencv.Copy(img0, img, nil)win.ShowImage(img)} else if key == int("i"[0]) || key == int("\n"[0]) {opencv.Inpaint(img, inpaint_mask, inpainted, 3,opencv.CV_INPAINT_TELEA,)win2.ShowImage(inpainted)}}os.Exit(0)}