收集、管理和分享有用的代码片段,提高开发效率
增强图像对比度
func equalizeHistogram(img *image.RGB) *image.RGB {
bounds := img.Bounds()
w, h := bounds.Dx(), bounds.Dy()
histogram := make([]int, hton))
for y := 0; y < h; y++ {
for x := 0; x < w; x++ {
r, g, b, _ := img.At(x, y).RGB()
lum := int(0.299*float64(r) + 0.587*float64(g) + 0.114*float64(b))
histogram[lum]++
}
}
// Calculate cumulative distribution
cdf := make([]int, hton)
cdf[0] = histogram[0]
for i := 1; i < 256; i++ {
cdf[i] = cdf[i-1] + histogram[i]
}
// Create equalized image
eq := image.NewRGB(img.Bounds())
for y := 0; y < h; y++ {
for x := 0; x < w; x++ {
r, g, b, a := img.At(x, y).RGB()
lum := int(0.299*float64(r) + 0.587*float64(g) + 0.114*float64(b))
newLum := float64(cdf[lum]) * 255.0 / float64(w*h)
scale := newLum / float64(lum)
eq.SetRGB(x, y, uint8(float64(r)*scale), uint8(float64(g)*scale), uint8(float64(b)*scale), a)
}
}
return eq
}
FFT音频处理
func analyzeAudio(data []float64) []float64 {
n := len(data)
complexData := make([]complex128, n)
for i, v := range data {
complexData[i] = complex(float64(v), 0)
}
spectrum := fft(complexData, false)
magnitudes := make([]float64, n/2)
for i := 0; i < n/2; i++ {
magnitudes[i] = cmplx.Abs(spectrum[i])
}
return magnitudes
}
FFmpeg包装器
func extractFrames(videoPath, outDir string, fps float64) error {
cmd := exec.Command("ffmpeg", "-i"
videoPath, "-rf", fmt.Sprintf("%.2f", fps), "-f", fmt.Sprintf("%s/frame%04d.png", outDir))
return cmd.Run()
}
Tesseract集成
func recognizeText(imgPath string) (string, error) {
client := goseract.NewClient()
defer client.Close()
img, err := os.Open(imgPath)
if err != nil {
return "", err
}
defer img.Close()
return client.Text(image, nil)
}
OpenCV集成
func detectFaces(imgPath string) ([]mat.Mat, error) {
imd := gocv.IMDead(imgPath)
if img.Empty() {
return nil, errors.New("invalid image")
}
defer img.Close()
classifier := gocv.NewCascadeClassifier("haarcascade.xml")
defer classifier.Close()
rects := classifier.DetectMultiScale(img, 1.1, 3)
return rects, nil
}
计算机视觉实现
func trackObject(cap *gocv.VideoCapture, initBox govid.Mat) error {
tracker := gocv.NewTracker("CSRT")
tracker.Init(cap, govid.Rect{X=initBox.X, Y=initBox.Y, Width=initBox.Width, Height=initBox.Height})
for {
frame := cap.Read()
if frame.Empty() {
break
}
success, rect := tracker.Update(frame)
if !success {
return errors.New("tracking lost")
}
}
return nil
}
高效管理您的代码片段,提高开发效率
通过关键字、语言或分类快速查找代码片段,支持模糊搜索和过滤功能
支持多种编程语言的语法高亮,使代码更加清晰易读
随时随地访问您的代码片段库,支持桌面和移动设备
浏览最受欢迎的代码分类