我是OpenCV4Android的新用户,目前我找到方法/提示来执行卷积时遇到了很大的问题。例如,我不想使用Imgproc过滤器函数,因为我并不总是能够理解参数。我想创建自己的垫子让我们说Sobels矩阵:
-1 -2 -1
0 0 0
1 2 1
并添加使用卷积以对我的图像执行Sobel过滤。我可以这样在OpenCV C ++中这样做:
CvMat* sobelMat = cvCreateMat(3,3,CV_32F);
cvSet2D(sobelMat,2,0,cvScalarAll(-1.0));
cvSet2D(sobelMat,2,1,cvScalarAll(0.0));
cvSet2D(sobelMat,2,2,cvScalarAll(1.0));
cvSet2D(sobelMat,1,0,cvScalarAll(-2.0));
cvSet2D(sobelMat,1,1,cvScalarAll(0.0));
cvSet2D(msobelMat,1,2,cvScalarAll(2.0));
cvSet2D(sobelMat,0,0,cvScalarAll(-1.0));
cvSet2D(sobelMat,0,1,cvScalarAll(0.0));
cvSet2D(sobelMat,0,2,cvScalarAll(1.0));
cvFilter2D(SobelImageGrey_PION,SobelImageGrey_PION,sobelMat);
我在OpenCV4Android中找不到cvSet2D方法,但是有cvFilter2D。任何人都可以给我提示/示例我该怎么做?
答案 0 :(得分:0)
如果您使用的是Java API,则可以看到Filter2D文档here
答案 1 :(得分:0)
好的,我找到了创建内核并填充它的方法。有例子:
mSepiaKernel = new Mat(4, 4, CvType.CV_32F);
mSepiaKernel.put(0, 0, /* R */0.189f, 0.769f, 0.393f, 0f);
mSepiaKernel.put(1, 0, /* G */0.168f, 0.686f, 0.349f, 0f);
mSepiaKernel.put(2, 0, /* B */0.131f, 0.534f, 0.272f, 0f);
mSepiaKernel.put(3, 0, /* A */0.000f, 0.000f, 0.000f, 1f);
感谢您的回答。