@Override
public Mat onCameraFrame(CameraBridgeViewBase.CvCameraViewFrame inputFrame) {
Mat rgb=inputFrame.rgba();
for(int y=0;y<rgb.cols();++y){
for(int x=0;x<rgb.rows();++x){
double[]pixelValues=rgb.get(x,y);
double redVal=pixelValues[0];
double greenVal=pixelValues[1];
double blueVal=pixelValues[2];
double alphaVal=pixelValues[3];
double gryVal=(redVal+greenVal+blueVal)/3;
rgb.put(x,y,gryVal,gryVal,gryVal,alphaVal);
}
}
return rgb;
}
这是我的代码,用于更改JavaCameraView组件内显示的cameraStream的像素值。事情是这很慢。小于3 fps。我知道有更快的方法来获取灰度图像{.rgba() => .gray()
或使用Improc.cvt()}
。虽然我需要自由处理像素的自由。我的最终目标是获得一些我可以调整红色,绿色,蓝色的东西。
有没有办法让这至少得到30fps(平滑帧率)?
答案 0 :(得分:1)
每个像素的获取和放置操作肯定会因为本机调用的开销而导致fps不佳。相反,你应该只调用一次get和put操作。在for循环之外。调用get / put到java原始数组并对它们进行操作。这样你就可以进行自己的像素操作,这将大大提高性能(更接近imgproc.cvt())。 http://answers.opencv.org/question/5/how-to-get-and-modify-the-pixel-of-mat-in-java/ 这将向您展示如何进行单个get / put调用的示例(不仅是实际答案,还会在注释中看到)。