1.文本多行合并为一行
package main
import (
"fmt"
"io/ioutil"
"strings"
)
func main() {
content, err := ioutil.ReadFile("E:\\gin_demo\\demo30DNF\\youhua\\input.txt")
if err != nil {
fmt.Println("Error reading input file:", err)
return
}
processedContent := strings.ReplaceAll(string(content), "\r\n", "")
err = ioutil.WriteFile("E:\\gin_demo\\demo30DNF\\youhua\\output.txt", []byte(processedContent), 0644)
if err != nil {
fmt.Println("Error writing output file:", err)
return
}
fmt.Println("Successfully removed newlines and saved to output.txt.")
}
2.文本中数据计算
package main
import (
"bufio"
"fmt"
"log"
"os"
"strconv"
)
func main() {
// 打开输入文件
inputFile, err := os.Open("D:\\goproject\\src\\golang\\demo02\\input.txt")
if err != nil {
log.Fatal(err)
}
defer inputFile.Close()
// 创建一个扫描器来读取输入文件
scanner := bufio.NewScanner(inputFile)
// 创建输出文件
outputFile, err := os.Create("D:\\goproject\\src\\golang\\demo02\\out.txt")
if err != nil {
log.Fatal(err)
}
defer outputFile.Close()
// 创建一个写入器来写入输出文件
writer := bufio.NewWriter(outputFile)
// 逐行处理输入文件内容
for scanner.Scan() {
// 将每行的字符串转换为浮点数
numStr := scanner.Text()
num, err := strconv.ParseFloat(numStr, 64)
if err != nil {
log.Println("无法解析数字:", numStr)
continue
}
// 将数字乘以0.8
result := num * 0.8
// 将结果写入输出文件
fmt.Fprintln(writer, result)
}
if err := scanner.Err(); err != nil {
log.Fatal(err)
}
// 刷新缓冲区,确保所有数据被写入文件
writer.Flush()
}
3.图找图
package main
import (
"fmt"
"github.com/kbinani/screenshot"
"gocv.io/x/gocv"
"image"
"image/color"
"image/jpeg"
"log"
"os"
"time"
)
func saveImage(img *image.RGBA, fileName string) error {
f, err := os.Create(fileName)
if err != nil {
return err
}
defer f.Close()
jpeg.Encode(f, img, nil)
return nil
}
func processScreenshot(tpl gocv.Mat) {
for {
img1, err := screenshot.Capture(0, 0, 800, 600)
if err != nil {
log.Fatal(err)
}
fileName := fmt.Sprintf("D:\\gin_demo\\photo\\demo1\\2.jpg")
err = saveImage(img1, fileName)
if err != nil {
log.Fatal(err)
}
time.Sleep(time.Second)
// 读取源图片和模板图片
img := gocv.IMRead(fileName, gocv.IMReadColor)
if img.Empty() || tpl.Empty() {
panic("无法加载图片")
}
defer img.Close()
// 创建输出结果矩阵
result := gocv.NewMat()
defer result.Close()
// 进行模板匹配
gocv.MatchTemplate(img, tpl, &result, gocv.TmCcoeffNormed, gocv.NewMat())
// 获取匹配结果
_, maxVal, _, maxLoc := gocv.MinMaxLoc(result)
fmt.Println("max correlation value:", maxVal)
// 设定一个阈值,判断是否匹配成功
threshold := float32(0.8)
if maxVal >= threshold {
fmt.Printf("Found template at: %+v\n", maxLoc)
} else {
fmt.Println("Template not found.")
}
// 可以在源图片上标记出模板匹配的位置,这一步,可以删除
if maxVal >= threshold {
rect := image.Rect(maxLoc.X, maxLoc.Y, maxLoc.X+tpl.Cols(), maxLoc.Y+tpl.Rows())
color := color.RGBA{R: 0, G: 0, B: 255, A: 0}
gocv.Rectangle(&img, rect, color, 2)
window := gocv.NewWindow("Template Match")
window.IMShow(img)
// 窗口等待时间
window.WaitKey(1000)
window.Close()
break
}
}
}
func main() {
// 读取模板图片
tpl := gocv.IMRead("D:\\gin_demo\\photo\\demo1\\1.jpg", gocv.IMReadColor)
if tpl.Empty() {
panic("无法加载模板图片")
}
defer tpl.Close()
processScreenshot(tpl)
}