Articles of 计算机视觉

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

我最近在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 […]

Android中的扩张和侵蚀

根据我的研究,在对图像进行二值化之后,可以使用扩张和侵蚀来弥合图像的空白。 我不确定是否需要使用cvSmooth 。

OpenCV的Android背景减去

我正在使用Android手机作为主处理器和相机来检测移动的机器人项目。 我从OpenCV获得了Android二进制包,并正确安装了它。 我可以使用OpenCV本地摄像头捕捉图像并将其显示在屏幕上。 不过,我有使用背景减法类的问题。 我可以在构造函数中创build一个新的BackgroundSubtractorMOG对象,但是当我尝试运行下面的代码时,它强制退出本机代码中出现错误“BackgroundSubtractorMOG中仅支持1和3通道8位图像”。 我试着改变Highgui.CV_CAP_ANDROID_COLOR_FRAME_RGBA到Highgui.CV_CAP_ANDROID_COLOR_FRAME_RGB,然后它不强制退出,但我得到的只是一个黑屏。 我很确定bmp对于FRAME_RGB仍然是空的,因为屏幕保持黑屏,并且我在绘制位图后立即绘制的fps计数器(从下面的代码中移除以清楚起见,作为故障排除步骤)不显示。 我看了这个函数的OpenCV C ++代码( 这里是第388行 ),如果图像types不是CV_8UC1或CV_8UC3,就会发生图像types错误,所以我尝试使用java CvType.CV_8UC3代替Highgui.CV_CAP_ANDROID_COLOR_FRAME_RGBA capture.retrieve(),但它强制closures,我得到了“输出帧格式不支持”的错误。 我猜测我刚刚得到了一个types转换的问题,但是我无法弄清楚OpenCV的Android特定的图像types是否符合他们常规的图像types。 任何帮助,将不胜感激。 variables: private SurfaceHolder mHolder; private VideoCapture mCamera; private Mat mRgba; private Mat mFGMask; private BackgroundSubtractorMOG mBGSub; 我的SurfaceView的run()函数: public void run() { Bitmap bmp = null; synchronized (this) { if (mCamera == null) break; if (!mCamera.grab()) { Log.e(TAG, "mCamera.grab() failed"); […]

Android上的标记识别(识别Rubik的立方体)

我正在开发一个Android的增强现实应用程序,使用手机的相机来识别魔方的每个面上的彩色正方形的排列。 我不确定的一件事情是如何去检测和识别立方体每个面上的彩色正方形。 如果你看一个魔方,那么你可以看到,每个方块都是六种可能的颜色之一,并带有一个薄的黑色边框。 这导致我认为它应该相对简单地检测一个正方形,可能使用现有的标记检测API。 我的问题是真的,这里有人有任何图像识别和Android的经验吗? 理想情况下,我希望能够实现和现有的API,但如果有人能指引我正确的方向开始,这将是一个有趣的项目,从头开始。 提前谢谢了。

使用get()和put()来访问OpenCV for Java中的像素值

我是使用OpenCV for JAVA的初学者。 我想访问一个图像matrix的个别像素值。 因为OpenCV的JAVA jar没有像C ++那样提供很好的function,所以遇到了一些麻烦。 经过大量的search,我find了两种不同的方法来做这件事,虽然他们没有正确解释(甚至没有文档)。 我们可以使用get()和put()函数,或者通过将mat数据转换为诸如数组等原始javatypes来实现。 我试了两次,但得到不同的输出结果! 请帮助解释我做错了什么。 我用他们错了还是其他一些愚蠢的问题。 我还是一个新手,所以请原谅,如果它是一个愚蠢的问题。 🙂 情况1:使用get()函数 Mat A = Highgui.imread(image_addr); \\"image_addr" is the address of the image Mat C = A.clone(); Size sizeA = A.size(); for (int i = 0; i < sizeA.height; i++) for (int j = 0; j < sizeA.width; j++) { double[] data […]

使用tesseract或OpenCV的android的对象检测

我已经成功地集成了tesseract到我的android应用程序,它读取我捕获的图像,但不太准确。 但是大部分时间我都没有得到正确的文本,因为在感兴趣的区域周围的文本也被捕获。 我想要读取的全是矩形区域中的所有文本,准确地说,没有捕获矩形的边缘。 我已经做了一些研究,发布在这个两次的计算器,但仍然没有得到一个快乐的结果! 以下是我做的两个职位: https://stackoverflow.com/questions/16663504/extract-text-from-a-captured-image?noredirect=1#comment23973954_16663504 在android中从捕获的图像中提取信息 我不确定是继续tesseract还是使用openCV

用OpenCV进行椭圆检测

我想用OpenCV for Android检测省略号,使用OpenCV 2.4.1包中的Tutorial 2-Basic作为起点。 请注意,我的椭圆将是一个完美的Photoshop的一个。 据我所知,使用“HoughCircles”只能find完美的(或者是这样的)圆,从而留下椭圆。 任何帮助将不胜感激,因为我是OpenCV的初学者 这是我迄今为止所尝试的 case Sample2NativeCamera.VIEW_MODE_CANNY: (ignore the Canny mode…) capture.retrieve(mGray, Highgui.CV_CAP_ANDROID_GREY_FRAME); Imgproc.HoughCircles(mGray, mCircles, Imgproc.CV_HOUGH_GRADIENT, 1, 20); Log.d("Ellipse Points", " X " + mCircles.get(1,1)[0] + mCircles.get(1, 1)[1]); break; 如果您认为更多信息可能有用,请告诉我。

计算机视觉和AR库可用于Android?

我开始作为Android开发人员,我想知道是否有Android SDK的计算机视觉库或增强现实库,因为我打算将这些库用于移动应用程序。 我已经读过,如果我下载NDK,我可能能够“导入/使用”C openCV和ARtoolkit库,但是我想知道这是否可行,或者是否有更好更简单的方法来使用这些工具。 Android应用程序使用Java编程,而OpenCV和ARtoolkit使用C / C ++。 有什么方法可以使用这些库吗?

如何在Android增强现实中检测物理对象?

我发现了很多方法来检测不同的形状。 但是当我为了一个物理对象而运气不好的时候。 从我读到的,我们应该有一个黑色的边框周围的图像,以制作一个模式文件。 如果我遵循这个概念并生成一个模式,那么我的应用程序会在打印输出中检测图像 但是在现实世界中,物体并不一定有一个黑色的边框。 更新 虽然我接受了答案,但是我的问题仍然没有解决。 由于检测物理对象仍然没有解决scheme。 欢迎任何进一步的研究和链接!

OpenCV ORB特征检测器如何工作?

我想使用ORB特征检测器和提取器实现基于特征的alignmentalgorithm。 到目前为止,我从OpenCV ORB orb;使用ORB类提取特征ORB orb; orb(gray_image,Mat(),features.keypoints,features.descriptors); 并使用来自openCV matcher.knnMatch(features1.descriptors, features2.descriptors, pair_matches,2);的knnMatch函数匹配它们matcher.knnMatch(features1.descriptors, features2.descriptors, pair_matches,2); 之后,我试图find使用findHomographyfunction的单应性,但是这个function至less需要4个图像特征之间的匹配,并且在我testing的大多数图像上我都less于4个。 有没有人使用过这个function? 有没有关于它的文档,或关于OpenCV的ORB类(ORB构造函数参数的含义)? PS这是我的第一个问题。 我不能发布超过2个链接。 对于opencv文档使用这个 。