0

我正在为 Android 使用 OpenCV,我想知道如何减轻 Mat 对象中的矩形表面。

我编写了这个函数,为该区域中每个像素的每个 RGB 分量添加 30。它按我预期的方式工作,但速度太慢了。

public Mat onCameraFrame(CvCameraViewFrame inputFrame) {
    Mat frame = inputFrame.rgba();
    int h = 300;
    int w = (int) ((int) ( (float) h ) * 1.5);

    return drawRectangle(frame, h, w);
}

private Mat drawRectangle(Mat frame, int h, int w){
    for( int y = (frame.rows() - h) / 2 ; y < (frame.rows() + h) / 2 ; y++ ) { 
        for( int x = (frame.cols() - w) / 2; x < (frame.cols() + w) / 2; x++ ) {
            for( int c = 0; c < 3; c++ ) {
                double[] color = frame.get(y, x);
                for(int i = 0; i < 3; i++)
                    color[i] += 30;

                frame.put(y, x, color);

            }
        }
    }
    return frame;
}

我确信有一种方法可以立即做到这一点(我见过黑白的例子,负面影响会立即处理)但我对 OpenCv 和 Android 不太熟悉,我想我还不知道其中的原理。

4

1 回答 1

0

直接用 a 访问区域CvRect并使用重载+

cv::Mat img;
int x,y,w,h,inc;
img(cv::Rect(x, y, w, h))+=cvScalar(inc,inc,inc);
于 2013-05-20T08:36:00.913 回答