我正在使用go-opencv从内置网络摄像头中获取帧。获取图像所需的时间大约为50毫秒。将其编码为PNG需要大约300毫秒。虽然JPEG的编码速度快3倍,但仍然非常慢。
为什么它运行得这么慢?
注意: 我已经在同一台机器上针对NodeJS编写了类似的代码,并且在进行额外的图像处理时没有任何问题,我认为这排除了硬件问题。
我的代码如下:
为什么它运行得这么慢?
注意: 我已经在同一台机器上针对NodeJS编写了类似的代码,并且在进行额外的图像处理时没有任何问题,我认为这排除了硬件问题。
我的代码如下:
import (
"fmt"
"image/png"
"github.com/lazywei/go-opencv/opencv"
)
camera := opencv.NewCameraCapture(0)
if camera == nil {
panic("Unable to open camera.")
}
defer camera.Release()
for {
if camera.GrabFrame() {
img := camera.RetrieveFrame(1)
if img != nil {
frame := img.ToImage()
buffer := new(bytes.Buffer)
png.Encode(buffer, frame)
} else {
fmt.Println("Unable to capture frame")
}
}
}
imwrite
仅保存mat。任何性能差异可能是由于副本或PNG编码器上不同的默认质量设置引起的。 - Mitchfor
循环内部声明缓冲区(使用var buffer bytes.Buffer
而不是new(bytes.Buffer)
),会发生什么。 - dlowe