---
panlei
2019-07-04 33a6e51d13101cb5095c2020853fffc93ad4fa72
util/simpleCV.go
@@ -1,6 +1,7 @@
package util
import (
   "basic.com/pubsub/protomsg.git"
   "bufio"
   "bytes"
   "encoding/json"
@@ -14,6 +15,8 @@
   "mime/multipart"
   "net/http"
   "os"
   "ruleprocess/cache"
   "ruleprocess/ruleserver"
   "time"
)
@@ -158,20 +161,19 @@
   }
}
func DrawPolygonOnImage()(maps map[string]interface{}, err0 error){
func DrawPolygonOnImage(cameraId string, img protomsg.Image) (maps map[string]interface{}, err0 error) {
   // draw the rook
   //rook := gocv.NewMatWithSize(w, w, gocv.MatTypeCV8UC3)
   //imgs := gocv.NewMat()
   //ddd, err := RetrieveROM("/home/user/workspace/ruleprocess/util/105.jpg")
   //if err != nil {
   //   fmt.Println("解码有误",err)
   //}
   //bbb := bytes.NewBuffer(ddd)  // 必须加一个buffer 不然没有read方法就会报错
   //rook, _ := gocv.NewMatFromBytes(500, 500, gocv.MatTypeCV8UC3, gocv.IMRead())
   rook := gocv.IMRead("/home/user/workspace/ruleprocess/util/105.jpg",gocv.IMReadColor)
   //rook,_ := gocv.IMDecode(bbb.Bytes(),gocv.IMReadColor)
   rook, _ := gocv.NewMatFromBytes(int(img.Height), int(img.Width), gocv.MatTypeCV8UC3, img.Data)
   //rook := gocv.IMRead("/home/user/workspace/ruleprocess/util/105.jpg",gocv.IMReadColor)
   defer rook.Close()
   green := color.RGBA{0, 255, 0, 0}
   red := color.RGBA{255, 0, 0, 0}
   //points := [][]image.Point{
   //   {
   //      image.Pt(100., 100),
@@ -181,14 +183,24 @@
   //   },
   //}
   //gocv.FillPoly(&rook, points, green)
   gocv.Line(&rook, image.Pt(100, 100), image.Pt(100, 250), green, 2)
   gocv.Line(&rook, image.Pt(100, 250), image.Pt(250, 250), green, 2)
   gocv.Line(&rook, image.Pt(250, 250), image.Pt(250, 100), green, 2)
   gocv.Line(&rook, image.Pt(250, 100), image.Pt(100, 100), green, 2)
   // 查到摄像机所有的区域并画框
   var cameraPolygons []protomsg.CameraPolygon
   cameraPolygons = cache.GetPolygonsByCameraId(cameraId)
   for _, polygon := range cameraPolygons {
      points := ruleserver.Json2points(polygon.Polygon)
      for index := 0; index < len(points); index++ {
         if index == len(points)-1 { // 闭合图形
            gocv.Line(&rook, image.Pt(int(points[index].X), int(points[index].Y)), image.Pt(int(points[0].X), int(points[0].Y)), red, 2)
         } else {
            gocv.Line(&rook, image.Pt(int(points[index].X), int(points[index].Y)), image.Pt(int(points[index+1].X), int(points[index+1].Y)), red, 2)
         }
      }
   }
   //return nil,nil
   // 上传
   fdata,_ := gocv.IMEncode(".jpg",rook)
   fdata, _ := gocv.IMEncode(".jpg", rook)
   body := &bytes.Buffer{}
   writer := multipart.NewWriter(body)
   _, err1 := writer.CreateFormFile("file", "fasjuierf")