mirror of
https://github.com/hybridgroup/gocv
synced 2025-08-25 08:41:04 +08:00
211 lines
4.5 KiB
Go
211 lines
4.5 KiB
Go
package gocv
|
|
|
|
import (
|
|
"fmt"
|
|
"io"
|
|
"io/ioutil"
|
|
"log"
|
|
"net/http"
|
|
"os"
|
|
"path"
|
|
"path/filepath"
|
|
"strconv"
|
|
"testing"
|
|
)
|
|
|
|
func TestIMRead(t *testing.T) {
|
|
img := IMRead("images/face-detect.jpg", IMReadColor)
|
|
defer img.Close()
|
|
if img.Empty() {
|
|
t.Error("Invalid Mat in IMRead")
|
|
}
|
|
}
|
|
|
|
func TestIMWrite(t *testing.T) {
|
|
dir, _ := ioutil.TempDir("", "gocvtests")
|
|
tmpfn := filepath.Join(dir, "test.jpg")
|
|
|
|
img := IMRead("images/face-detect.jpg", IMReadColor)
|
|
defer img.Close()
|
|
if img.Empty() {
|
|
t.Error("Invalid read of Mat in IMWrite test")
|
|
}
|
|
|
|
result := IMWrite(tmpfn, img)
|
|
if !result {
|
|
t.Error("Invalid write of Mat in IMWrite test")
|
|
}
|
|
}
|
|
|
|
func TestIMWriteWithParams(t *testing.T) {
|
|
dir, _ := ioutil.TempDir("", "gocvtests")
|
|
tmpfn := filepath.Join(dir, "test.jpg")
|
|
|
|
img := IMRead("images/face-detect.jpg", IMReadColor)
|
|
defer img.Close()
|
|
if img.Empty() {
|
|
t.Error("Invalid read of Mat in IMWrite test")
|
|
}
|
|
|
|
result := IMWriteWithParams(tmpfn, img, []int{IMWriteJpegQuality, 60})
|
|
if !result {
|
|
t.Error("Invalid write of Mat in IMWrite test")
|
|
}
|
|
}
|
|
|
|
func TestIMEncode(t *testing.T) {
|
|
img := IMRead("images/face-detect.jpg", IMReadColor)
|
|
defer img.Close()
|
|
if img.Empty() {
|
|
t.Error("Invalid Mat in IMEncode test")
|
|
}
|
|
|
|
buf, err := IMEncode(PNGFileExt, img)
|
|
if err != nil {
|
|
t.Error(err)
|
|
}
|
|
defer buf.Close()
|
|
bytes := buf.GetBytes()
|
|
if len(bytes) < 43000 {
|
|
t.Errorf("Wrong buffer size in IMEncode test. Should have been %v\n", len(bytes))
|
|
}
|
|
}
|
|
|
|
func ExampleIMEncodeWithParams() {
|
|
img := IMRead(path.Join(os.Getenv("GOPATH"), "src/gocv.io/x/gocv/images/face-detect.jpg"), IMReadColor)
|
|
if img.Empty() {
|
|
log.Fatal("Invalid Mat")
|
|
}
|
|
|
|
imgHandler := func(w http.ResponseWriter, req *http.Request) {
|
|
quality := 75
|
|
if q, err := strconv.Atoi(req.URL.Query().Get("q")); err == nil {
|
|
quality = q
|
|
}
|
|
buffer, err := IMEncodeWithParams(JPEGFileExt, img, []int{IMWriteJpegQuality, quality})
|
|
if err != nil {
|
|
w.WriteHeader(http.StatusInternalServerError)
|
|
io.WriteString(w, err.Error())
|
|
return
|
|
}
|
|
defer buffer.Close()
|
|
w.Header().Set("Content-Type", "image/jpeg")
|
|
w.WriteHeader(http.StatusOK)
|
|
w.Write(buffer.GetBytes())
|
|
}
|
|
|
|
http.HandleFunc("/img", imgHandler)
|
|
fmt.Println("Open in browser http://127.0.0.1:8080/img?q=10 where q is a JPEG quality parameter")
|
|
log.Fatal(http.ListenAndServe("127.0.0.1:8080", nil))
|
|
}
|
|
|
|
func TestIMEncodeWithParams(t *testing.T) {
|
|
img := IMRead("images/face-detect.jpg", IMReadColor)
|
|
defer img.Close()
|
|
if img.Empty() {
|
|
t.Error("Invalid Mat in IMEncode test")
|
|
}
|
|
|
|
buf, err := IMEncodeWithParams(JPEGFileExt, img, []int{IMWriteJpegQuality, 75})
|
|
if err != nil {
|
|
t.Error(err)
|
|
}
|
|
defer buf.Close()
|
|
if buf.Len() < 18000 {
|
|
t.Errorf("Wrong buffer size in IMEncode test. Should have been %v\n", buf.Len())
|
|
}
|
|
|
|
buf2, err := IMEncodeWithParams(JPEGFileExt, img, []int{IMWriteJpegQuality, 100})
|
|
if err != nil {
|
|
t.Error(err)
|
|
}
|
|
defer buf2.Close()
|
|
if buf2.Len() < 18000 {
|
|
t.Errorf("Wrong buffer size in IMEncode test. Should have been %v\n", buf2.Len())
|
|
}
|
|
|
|
if buf.Len() >= buf2.Len() {
|
|
t.Errorf("Jpeg quality parameter does not work correctly\n")
|
|
}
|
|
}
|
|
|
|
func TestIMDecode(t *testing.T) {
|
|
content, err := ioutil.ReadFile("images/face-detect.jpg")
|
|
if err != nil {
|
|
t.Error("Invalid ReadFile in IMDecode")
|
|
}
|
|
|
|
dec, err := IMDecode(content, IMReadColor)
|
|
if err != nil {
|
|
t.Error(err.Error())
|
|
}
|
|
if dec.Empty() {
|
|
t.Error("Invalid Mat in IMDecode")
|
|
}
|
|
dec.Close()
|
|
|
|
dec, err = IMDecode([]byte{}, IMReadColor)
|
|
if err == nil {
|
|
t.Error("Should not decode empty array")
|
|
}
|
|
}
|
|
|
|
func TestIMDecodeIntoMat(t *testing.T) {
|
|
mat := NewMat()
|
|
defer mat.Close()
|
|
content, err := ioutil.ReadFile("images/face-detect.jpg")
|
|
if err != nil {
|
|
t.Error("Invalid ReadFile in IMDecode")
|
|
}
|
|
|
|
err = IMDecodeIntoMat(content, IMReadColor, &mat)
|
|
if err != nil {
|
|
t.Error(err.Error())
|
|
}
|
|
if mat.Empty() {
|
|
t.Error("Invalid Mat in IMDecode")
|
|
}
|
|
|
|
}
|
|
|
|
func TestIMDecodeWebp(t *testing.T) {
|
|
content, err := ioutil.ReadFile("images/sample.webp")
|
|
if err != nil {
|
|
t.Error("Invalid ReadFile in IMDecodeWebp")
|
|
}
|
|
|
|
dec, err := IMDecode(content, IMReadColor)
|
|
if err != nil {
|
|
t.Error(err.Error())
|
|
}
|
|
if dec.Empty() {
|
|
t.Error("Invalid Mat in IMDecodeWebp")
|
|
}
|
|
dec.Close()
|
|
|
|
}
|
|
|
|
func TestIMReadMulti(t *testing.T) {
|
|
|
|
mats := IMReadMulti("images/multipage.tif", IMReadAnyColor)
|
|
|
|
for i, page := range mats {
|
|
if page.Empty() {
|
|
t.Errorf("page %d empty", i)
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
func TestIMReadMulti_WithParams(t *testing.T) {
|
|
|
|
mats := IMReadMulti_WithParams("images/multipage.tif", 2, 3, IMReadAnyColor)
|
|
|
|
for i, page := range mats {
|
|
if page.Empty() {
|
|
t.Errorf("page %d empty", i)
|
|
}
|
|
}
|
|
|
|
}
|