Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/136.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
索贝尔安卓C++;不带库的OpenCV 我尝试用C++在Android Studio中实现Sobel边缘检测,并提供最小的库帮助。我必须自己编写算法,所以我不能使用sobel或OpenCV提供的任何函数_Android_C++_Image_Opencv_Sobel - Fatal编程技术网

索贝尔安卓C++;不带库的OpenCV 我尝试用C++在Android Studio中实现Sobel边缘检测,并提供最小的库帮助。我必须自己编写算法,所以我不能使用sobel或OpenCV提供的任何函数

索贝尔安卓C++;不带库的OpenCV 我尝试用C++在Android Studio中实现Sobel边缘检测,并提供最小的库帮助。我必须自己编写算法,所以我不能使用sobel或OpenCV提供的任何函数,android,c++,image,opencv,sobel,Android,C++,Image,Opencv,Sobel,问题是给定的输出看起来像这样抽象 . 我找不到与此相关的讨论 我使用4通道8UC4垫子,用JNI调用C++。和struct来包含图像,如下所述 任何帮助都将不胜感激。非常感谢 以下是代码片段: #pragma pack(push, 2) struct RGB { uchar red; uchar green; uchar blue; float alfa; }; 上面的代码显示了结构 extern "C" JNIEXPORT void JNICALL Java_co

问题是给定的输出看起来像这样抽象 . 我找不到与此相关的讨论

我使用4通道8UC4垫子,用JNI调用C++。和struct来包含图像,如下所述

任何帮助都将不胜感激。非常感谢

以下是代码片段:

#pragma pack(push, 2)
struct RGB {      
  uchar red;
  uchar green;
  uchar blue;
  float alfa;
};
上面的代码显示了结构

extern "C"
JNIEXPORT void JNICALL
Java_com_example_rakad_skripsi_1c_1realtime_RealTimeDetection_gscale(JNIEnv *env, jobject, jlong frame){
Mat& Frame = *(Mat*)frame;

int row = Frame.rows;
int col = Frame.cols;

GaussianBlur( Frame, Frame, Size( 7, 7), 0, 0 ); // Optional Noise Reduction

for (int y = 0; y < row; y++) {
    for (int x = 0; x < col; x++) {
        //GET PIXEL VALUE
        RGB& frm = Frame.ptr<RGB>(y)[x];
        uchar gray = (frm.blue * 0.587) + (frm.green * 0.114) + (frm.red * 0.299); //Grayscale

        //REPLACE PIXEL VALUE
        frm.red = gray;
        frm.blue = gray;
        frm.green = gray;
    }
  }
}
extern“C”
JNIEXPORT void JNICALL
Java_com_示例_rakad_skripsi_1c_1realtime_realtime detection_gscale(JNIEnv*env,jobject,jlong frame){
垫和框架=*(垫*)框架;
int行=Frame.rows;
int col=Frame.cols;
高斯模糊(帧,帧,大小(7,7,0,0);//可选降噪
对于(int y=0;y
上面的代码是灰度法。该方法在20+fps的实时性下运行良好,没有任何问题

extern "C"
JNIEXPORT void JNICALL
Java_com_example_rakad_skripsi_1c_1realtime_RealTimeDetection_sobel(JNIEnv *env, jobject, jlong frame){
Mat& Frame = *(Mat*)frame;

int row = Frame.rows;
int col = Frame.cols;

/*SOBEL OPERATOR MATRIX

    Gx =    [   -1   0   1  ]       Gy =    [    1    2    1   ]
            [   -2   0   2  ]               [    0    0    0   ]
            [   -1   0   1  ]               [   -1   -2   -1   ]
 */

/*IMAGE MATRIX

  Image =   [   1   2   3   ]
            [   4   5   6   ]
            [   7   8   9   ]
 */

for (int x = 0; x < row; x++) {
    for (int y = 0; y < col; y++) {

        int gradX, gradY, grad = 0;
        RGB& mid = Frame.ptr<RGB>(x)[y];

        if (x == 0 || x == row-1 || y == 0 || y == col-1){

            gradX = gradY = 0;

        } else {

            RGB& px1 = Frame.ptr<RGB>(x-1)[y-1];   RGB& px2 = Frame.ptr<RGB>(x)[y-1];     RGB& px3 = Frame.ptr<RGB>(x+1)[y-1];
            RGB& px4 = Frame.ptr<RGB>(x-1)[y];                                            RGB& px6 = Frame.ptr<RGB>(x+1)[y];
            RGB& px7 = Frame.ptr<RGB>(x-1)[y+1];   RGB& px8 = Frame.ptr<RGB>(x)[y+1];     RGB& px9 = Frame.ptr<RGB>(x+1)[y+1];

            gradX = (px1.red * (-1)) + (px4.red * (-2)) + (px7.red * (-1)) + (px3.red) + (px6.red * 2) + (px9.red);

            gradY = (px7.red * (-1)) + (px8.red * (-2)) + (px9.red * (-1)) + (px1.red) + (px2.red * 2) + (px3.red);

        }

        grad = sqrt((gradX*gradX) + (gradY*gradY));
        saturate_cast<uchar>(grad);

        mid.red = grad;
        mid.green = grad;
        mid.blue = grad;
    }
  }
}
extern“C”
JNIEXPORT void JNICALL
Java_com_示例_rakad_skripsi_1c_1realtime_realtime detection_sobel(JNIEnv*env,jobject,jlong frame){
垫和框架=*(垫*)框架;
int行=Frame.rows;
int col=Frame.cols;
/*索贝尔算子矩阵
Gx=[-10 1]Gy=[1 2 1]
[   -2   0   2  ]               [    0    0    0   ]
[   -1   0   1  ]               [   -1   -2   -1   ]
*/
/*图像矩阵
图像=[1 2 3]
[   4   5   6   ]
[   7   8   9   ]
*/
对于(int x=0;x

以上代码就是问题所在。它显示了前面提到的图片。

灰度计算的系数没有正确应用:(0.299,0.587,0.114)*(R,G,B)@R非常感谢,我已经编辑了代码。但我认为这与我的实际问题无关,因为我仍然有问题。还有其他建议吗?你的代码没有标准化渐变值。除以算符矩阵的绝对值之和。嗨,我试过你的解决方案,但是我得到了所有的黑色图像。如何正确地规范化?如果问题中的代码仍然是您使用的代码:那么其中还有一个主要问题。不应将输出写入同一缓冲区。写入一个单独的输出缓冲区,并在最后将结果复制回来。