Articles of opencv

当OpenCV for Android使用GaussianBlur时,Eclipse会给出错误

我发布了我的代码的一小部分,因为我不断得到一个奇怪的错误,我似乎无法摆脱。 这个问题可以在这行find: Imgproc.GaussianBlur(mGray,mGray,new Size(5,5),2.2,2); public Mat onCameraFrame(Mat inputFrame) { mGray = new Mat(); Imgproc.cvtColor(mRgba, mGray, Imgproc.COLOR_RGBA2GRAY); // doing a gaussian blur prevents getting a lot of false hits Imgproc.GaussianBlur(mGray, mGray, new Size (5,5), 2.2, 2); // Values 3 and 4are the LowerThreshold and UpperThreshold. Imgproc.Canny(inputFrame, mIntermediateMat, 80, 100); Imgproc.cvtColor(mIntermediateMat,mRgba, Imgproc.COLOR_GRAY2BGRA, 4); return mIntermediateMat; } 我从Eclipse获得的错误是: […]

ClassNotFoundException:android.hardware.camera2.CameraAccessException与OpenCV 3.1.0

我正在使用Android Studio 2.2使用OpenCV 3.1.0库的Android项目。 我根据这个答案导入了库。 情况如下: 当我编译API> = 21(完全API 23)的设备的项目时,一切顺利。 当我为API <21(正好是API 19,我想支持的最小API)的设备编译项目时,出现以下编译错误: Gradle日志 FAILURE: Build failed with an exception. * What went wrong: Execution failed for task ':app:transformClassesWithInstantRunForDebug'. > java.lang.ClassNotFoundException: android.hardware.camera2.CameraAccessException * Try: Run with –info or –debug option to get more log output. * Exception is: org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':app:transformClassesWithInstantRunForDebug'. at […]

用FAST检测SURF描述更快?

对于我的硕士论文,我正在对SIFT SURF en FASTalgorithm进行一些testing,以便在智能手机上进行徽标检测。 当我简单的时间检测,描述相匹配的一些方法,我得到以下结果。 对于SURF检测器和SURF描述符: 发现了180个关键点 关键点计算时间(SURF):1,994秒 描述时间(SURF)4,516秒 匹配时间0.282秒(SURF) 当我使用FAST检测器代替SURF检测器时 find319个关键点 0.023秒关键点计算时间(FAST) 描述时间(SURF)1.295秒 0.397秒匹配时间(SURF) FAST检测器比SURF检测器快得多,甚至可以快100倍地检测到两倍的关键点。 这些结果是可以预测的。 下一步虽然不是预测的结果。 SURF描述符在319个FAST关键点和180个SURF关键点之间有多快? 据我所知,描述与检测algorithm没有关系,但这些结果并不如预测的那样。 有人知道这有可能吗? 这里是代码: FeatureDetector detector = FeatureDetector.create(FeatureDetector.SURF); //FeatureDetector detector = FeatureDetector.create(FeatureDetector.FAST); Imgproc.cvtColor(image1, image1, Imgproc.COLOR_RGBA2RGB); Imgproc.cvtColor(image2, image2, Imgproc.COLOR_RGBA2RGB); DescriptorExtractor SurfExtractor = DescriptorExtractor .create(DescriptorExtractor.SURF); //extract keypoints long time= System.currentTimeMillis(); detector.detect(image1, keypoints); Log.d("LOG!", "number of query Keypoints= " + […]

在Android开源项目中面对解锁代码?

有谁知道android源码树中的脸部解锁代码的位置? 我正在寻找在我的应用程序中包含一些面部识别,并希望使用谷歌已经创build的代码。 我已经看到了诸如opencv和其他一些第三方API的替代scheme,但是我真的很想看到google做到这一点的方式。 谢谢!

将Android预览帧转换为OpenCV Mat

我试图从相机预览中捕捉图像,并使用OpenCV将其转换为Mat对象。 我注册了CallBak方法public void onPreviewFrame(byte[] data, Camera camera)所以我接收到来自相机的所有预览帧,但我无法将其转换为OpenCV Mat对象。 我目前使用下面的代码将预览data转换为Mat对象: Mat previewFrameMat = new Mat(1, data.length, CvType.CV_8U); previewFrameMat.put(0, 0, data); 这是正确的方法吗? 我使用正确的图像types( CvType.CV_8U )?

基于OpenCV for Android的matrix乘法

我可能在这里是非常愚蠢的,但是我在使用OpenCV for Android做一些基本的Mat乘法时遇到了麻烦。 我有两个相同types的Mat, CV_64F mat1尺寸:3行,3列 mat2尺寸:3行,1列 我想乘以他们给大小3行1列的产品mat3 。 我试过使用: Mat mat3 = new Mat(3, 1, CvType.CV_64F); Core.multiply(mat1, mat2, mat3); 但是我得到一个错误: CvException [org.opencv.core.CvException:/home/andreyk/OpenCV2/trunk/opencv_2.3.1.b2/modules/core/src/arithm.cpp:1253:error:(-209)该操作既不是'array op (const cv :: _ InputArray&,const cv :: _ InputArray&,array''(其中数组的大小和通道数相同),也不是'数组运算标量',也不是'标量运算数组' const cv :: _ OutputArray&,const cv :: _ InputArray&,int,void(* )(const uchar ,size_t,const uchar *,size_t,uchar *,size_t,cv :: Size,void *),bool,void *) 我究竟做错了什么? 提前感谢您的帮助。 编辑: […]

通过使用mat.get(),像素的OpenCV颜色值有时返回null

我尝试在Android和OpenCV 2.4.4上使用mat.get(inx,int y)获取像素的RGB值。 Mat img = Utils.loadResource(getBaseContext(), R.drawable.ex3); double[] tmp = img.get(100, 100); if(printLog) Log.v(tag, "Color: "+ tmp[0] +","+ tmp[1] +","+ tmp[2] +""); 通常我得到了返回的tmp数组。 但在一些像素,我得到了返回“空”。 (这点在图片的范围!) 那么为什么我在一些数组和其他一些“空”的坐标,以及如何解决?

Gradle NDK在生成的Android.mk中指定一个'include'指令

当你有 android { defaultConfig { ndk { moduleName "yourlib" stl "stlport_static" ldLibs "log", "z", "m" cFlags "-I/some/include/dir/" } … } … } 在build.gradle中,Gradle将编译src / main / jni /中的文件,并在build / ndk / debug / Android.mk中生成一个Android.mk文件。 不过,在我的情况下,我试图编译一些针对OpenCV编译的C ++文件。 当我手动创buildAndroid.mk文件并运行ndk-build命令时,我有这个工作。 但是我想通过Gradle / Android Studio自动完成。 手动完成此操作时,我会包含要链接的库。 我在手动创build的Android.mk中执行以下操作: include /path/to/the/opencv/directory/sdk/native/jni/OpenCV.mk 但是,在Android的Gradle插件中,我不确定如何在生成的Android.mk文件中添加这个“include”指令。 任何人都可以指向我在正确的Gradle指示方向添加此行到生成文件? 谢谢。

计算透视变换目标图像的宽高比

我最近在OpenCV中实现了透视转换到我的Android应用程序。 几乎所有的工作都没有问题,但一方面需要做更多的工作。 问题是我不知道如何计算透视变换的目标图像的正确高宽比(不需要手动设置),以便它可以计算图像的高宽比与真实的大小东西/图像, 尽pipe相机的angular度 。 请注意,起始坐标不形成梯形,它确实形成一个四边形。 如果我有一张从大约45度拍摄的书的照片,我希望目标图像的纵横比与本书的纵横比几乎相同。 有2D照片很难,但CamScanner应用程序完美。 我已经做了非常简单的方法来计算我的目标图像的大小(没有期望它的工作,因为我想),但它使图像从45度angular约20%,当降低angular度的图像高度减less很显然,虽然CamScanner可以完美的完成angular度, 在这里,CamScanner保持目标图像(第二个)的纵横比与书本相同,即使在20度的angular度下,它也相当准确。 同时,我的代码看起来像这样(虽然计数目标图像的大小,我没有打算它的工作,因为我问这个问题): public static Mat PerspectiveTransform(Point[] cropCoordinates, float ratioW, float ratioH, Bitmap croppedImage) { if (cropCoordinates.length != 4) return null; double width1, width2, height1, height2, avgw, avgh; Mat src = new Mat(); List<Point> startCoords = new ArrayList<>(); List<Point> resultCoords = new ArrayList<>(); Utils.bitmapToMat(croppedImage, src); for (int […]

在Java中打印opencvmatrix内容

我有Java的openCVmatrix,我想打印出它的内容。我尝试toString()函数如下descriptor.toString(),所以我可以实现这种forms "[[1,2,3,4],[4,5,6,7],[7,8,9,10]]" 其中每个数组是matrix中的第i行,但是我得到了以下结果。 我试图删除toString,但仍然是同样的问题。 Mat [ 3*4*CV_8UC1, isCont=true, isSubmat=false, nativeObj=0x5dc93a48, dataAddr=0x5d5d35f0] 其中3是行数,4是列数。 任何帮助如何获得matrix内容?