Articles of opencv

android工作室中的opencv导入highgui显示错误。无法解析(我添加了库仍然是错误仍然存​​在)

我有以下代码,用于使用grabcut opencv进行图像分割。 我是第一次使用opencv。 我添加了opencv库。 虽然其他人工作完美highgui仍然显示无法解决符号。我需要添加其他东西。 ( 如果你也可以帮我处理代码,那将是一个额外的帮助 )这是代码: 编辑:我已经发布了更新的代码: package com.example.android.seg; import android.support.v7.app.ActionBarActivity; import android.os.Bundle; import android.util.Log; import android.view.Menu; import android.view.MenuItem; import java.io.IOException; import org.opencv.android.OpenCVLoader; import org.opencv.android.Utils; import org.opencv.core.Core; import org.opencv.core.CvType; import org.opencv.core.Mat; import org.opencv.core.Point; import org.opencv.core.Rect; import org.opencv.core.Scalar; import org.opencv.imgproc.Imgproc; import org.opencv.core.*; import org.opencv.imgcodecs.Imgcodecs; // imread, imwrite, etc // VideoCapture import android.app.Activity; import android.graphics.Bitmap; […]

在OpenCV中将Mat对象从本机代码返回到java

我有一个OpenCV Android应用程序。 它的大部分代码都是用Java编写的,但我有一个函数在C中。函数获取一个Mat对象并返回一个新对象。 我的问题是如何将本机代码中的Mat返回给Java? 找不到任何例子。 谢谢。

ANDROID – 使用openCV进行颜色检测 – 如何操作?

我的目标是使用HSV颜色空间显示一个脱粒的图像,只显示黄色对象。 我使用此代码(基于openCV 2.3.1 android示例提供的代码): protected Bitmap processFrame(VideoCapture capture) { //capture.retrieve(mGray, Highgui.CV_CAP_ANDROID_GREY_FRAME); //Imgproc.cvtColor(mGray, mRgba, Imgproc.COLOR_GRAY2RGBA, 4); capture.retrieve(mHSV, Highgui.CV_CAP_ANDROID_COLOR_FRAME_RGBA); Imgproc.cvtColor(mHSV, mRgba, Imgproc.COLOR_RGB2HSV, 4); //Core.inRange(mRgba, new Scalar(20, 100, 100), new Scalar(30, 255, 255), mRgba); Bitmap bmp = Bitmap.createBitmap(mRgba.cols(), mRgba.rows(), Bitmap.Config.ARGB_8888); if (Utils.matToBitmap(mRgba, bmp)) return bmp; bmp.recycle(); return null; } base(Abstract)类包含“run”方法: protected abstract Bitmap processFrame(VideoCapture capture); public void run() […]

Android:同时录制和流媒体

这不是一个真正的问题,因为它是我尝试解决我所遇到的最具挑战性function之一的所有尝试。 我使用libstreaming库将实时video流式传输到Wowza Server ,我需要在SD卡内同时录制它。 为了从社区中收集新的想法,我将在下面展示我的所有尝试。 将libstreaming流中的字节复制到mp4文件 发展 我们在libstreaming库中创建了一个拦截,将所有发送的字节复制到mp4文件中。 Libstreaming通过LocalSocket将字节发送到Wowza服务器。 它使用MediaRecorder访问摄像头和设备的麦克风,并将输出文件设置为LocalSocket的输入流。 我们要做的是围绕从InputStream扩展的输入流创建一个包装器,并在其中创建一个File输出流。 因此,每当libstreaming通过LocaSocket的输入流执行读取时,我们都会将所有数据复制到输出流,尝试创建有效的MP4文件。 障碍 当我们尝试读取文件时,它已损坏。 我们意识到MP4文件中缺少元信息。 特别是moovprimefaces。 我们试图延迟关闭流媒体,以便有时间发送这个标题(这仍然是一个猜测),但它没有用。 为了测试这些数据的一致性,我们使用付费软件尝试恢复video,包括标题。 它变得可玩了,但它主要是绿屏。 所以这成了一个不值得信赖的解决方案。 我们还尝试使用“untrunc”,一个免费的开源命令行程序,它甚至无法启动恢复,因为没有moovprimefaces。 使用编译到android的ffmpeg访问摄像头 发展 FFMPEG有一个带有java接口的gradle插件,可以在Android应用程序中使用它。 我们认为我们可以通过命令行访问摄像机(可能在“/ dev / video0”中)并将其发送到媒体服务器。 障碍 我们在尝试访问摄像头时收到错误“Permission Denied”。 解决方法是使设备具有访问权限,但它会使手机失去保修范围,并且可能会破坏它们。 使用ffmpeg编译到android结合MediaRecorder 发展 我们尝试通过MediaRecorder使FFMPEG流成为手机内部录制的mp4文件 障碍 FFMPEG无法传输尚未完成录制的MP4文件。 使用libfing编译到android的ffmpeg 发展 Libstreaming使用LocalServerSocket作为应用程序和服务器之间的连接,因此我们认为可以使用与LocalServerSocket本地地址连接的ffmpeg将流直接复制到SD卡内的本地文件。 在流式传输开始后,我们还运行了ffmpeg命令以开始将数据记录到文件中。 使用ffmpeg,我们相信它会以正确的方式创建一个MP4文件,这意味着包含了moov atom头。 障碍 创建的“地址”不能通过命令行读取,作为手机内的本地地址。 因此副本是不可能的。 使用OpenCV 发展 OpenCV是一个开源的跨平台库,为计算机视觉实验和应用程序提供构建块。 它提供用于捕获,处理和呈现图像数据的高级接口。 它有自己的API与设备摄像头连接,所以我们开始研究它,看它是否具有同时流和记录的必要function。 障碍 我们发现库并没有真正定义为这样做,而是更像图像数学操作。 我们甚至得到了使用libstreaming的建议(我们已经这样做了)。 使用Kickflip […]

DrawMatching两个图像 – 图像识别

我试图在两个图像之间显示匹配的关键点(一个是从我的相机捕获的,另一个是从数据库中捕获的) 任何人都可以帮助我在我的代码中编写DrawMatches函数,以显示2个图像之间匹配的行。 这是我的代码: public final class ImageDetectionFilter{ // Flag draw target Image corner. private boolean flagDraw ; // The reference image (this detector’s target). private final Mat mReferenceImage; // Features of the reference image. private final MatOfKeyPoint mReferenceKeypoints = new MatOfKeyPoint(); // Descriptors of the reference image’s features. private final Mat mReferenceDescriptors = new Mat(); […]

上下文切换是否耗费了大量时间?

我一直在使用app(使用java和C ++以及OpenCV)的问题,这似乎与执行各种任务所花费的时间非常不一致。 为了帮助诊断这个,我在java中创建了一个函数(称为one_off_speed_test() ),它在循环中只执行一系列整数数学问题,大约需要半秒钟,然后打印到日志所需的时间。 如果我在onCreate()内重复调用此函数,则每次调用所用的时间非常一致(+ = 3%),但是如果我从onCameraFrame()调用它,则OpenCV在准备好图像时调用的函数从相机中,每个帧中的数学测试所花费的时间会因任何因素而异。 我决定在eclipse / DDMS中尝试执行采样器,看看我是否可以解决发生的事情。 我看到当我点击one_off_speed_test() ,它列出了该函数的父项和子项,以及一行“ (上下文切换) ”。 然后在该行上,在标有“ Incl Real Time ”的列下,它显示“66%”。 现在我在使用DDMS方面不是很专业,而且我对上下文切换只有一个朦胧的想法,但从目前的描述来看,我是否有上下文切换问题占用了大量时间? 或者我误解了DDMS输出。

从照片opencv中删除眩光

因此,我使用opencv捕获文档,扫描并裁剪文档。 当房间里没有灯光时,它可以完美地工作。 当房间里有一些灯光,桌子上有眩光并且文件靠近它时,它也会抓住眩光作为矩形的一部分。 如何从照片中消除眩光? 这是我用来获取我想要的图像的代码: Mat &image = *(Mat *) matAddrRgba; Rect bounding_rect; Mat thr(image.rows, image.cols, CV_8UC1); cvtColor(image, thr, CV_BGR2GRAY); //Convert to gray threshold(thr, thr, 150, 255, THRESH_BINARY + THRESH_OTSU); //Threshold the gray vector<vector > contours; // Vector for storing contour vector hierarchy; findContours(thr, contours, hierarchy, CV_RETR_CCOMP, CV_CHAIN_APPROX_SIMPLE); // Find the contours in the image […]

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

我是使用OpenCV进行JAVA的初学者。 我想访问图像矩阵的各个像素值。 因为,用于OpenCV的JAVA jar不提供像C ++这样的好function,我遇到了一些麻烦。 经过大量的搜索,我发现了两种不同的方法,虽然没有正确解释(甚至在文档中都没有)。 我们可以使用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 = A.get(i, […]

具有tesseract或OpenCV的android的对象检测

我已成功将tesseract集成到我的Android应用程序中,它会读取我捕获的任何图像,但准确度却非常低。 但是大部分时间我都没有在捕获后获得正确的文本,因为感兴趣区域周围的一些文本也被捕获。 所有我想要阅读的都是来自矩形区域的所有文本,准确无需捕获矩形的边缘。 我做了一些研究并在stackoverflow上发布了这两次,但仍然没有得到满意的结果! 以下是我发的2篇post: https://stackoverflow.com/questions/16663504/extract-text-from-a-captured-image?noredirect=1#comment23973954_16663504 从android中捕获的图像中提取信息 我不确定是继续使用tesseract还是使用openCV

CUDA与opencv for Android

是否有可能在Android-Opencv中构建基于CUDA的opencv代码? 我的目的是在Android opencv中启用CUDA构建一个Opencv项目? 有人试过吗? 我用Google搜索并发现它没有任何线索?