Tag: opencv

使用Eclipse构建Android的原生Opencv,给出了“未定义的对`cvCreateFileCapture’的引用”

我正在开发一个带有原生部分的应用程序,它使用嵌入式OpenCV从video文件中提取帧。 到目前为止,我收到了这个错误: …/jni/ocv.c:12: undefined reference to `cvCreateFileCapture’ 我的Android.mk: LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := ocv LOCAL_SRC_FILES := ocv.c include $(BUILD_SHARED_LIBRARY) Application.mk: APP_STL := gnustl_static APP_CPPFLAGS := -frtti -fexceptions APP_ABI := armeabi ocv.c: #include #include #include #include #include #include jstring Java_com_ice_salvador_MainActivity_invokeNativeFunction(JNIEnv* env, jobject javaThis) { IplImage* currFrame = 0; CvCapture* cap = 0; cap […]

在Android Java应用程序中使用OpenCV Mat。 OpenCV Mat的NoClassDefFound错误

我正在用java开发一个Android应用程序,它调用本机c库中的函数。 本机函数需要一个指向Opencv Mat类型的指针,因此我需要能够在我的Java应用程序中创建Opencv Mat类型以传递给本机库。 我正在使用Android Studio,我已将’opencv library’.jar文件添加到我项目的libs文件夹中。 所以我可以导入所需的Opencv模块并创建Opencv Mat类型/访问其function。 问题是在运行时我收到以下错误: java.lang.NoClassDefFoundError: org.opencv.core.Mat 我已经读过Opencv .jar文件只是本机function的包装器,应用程序需要“本机库”。 我如何找到/添加这个? 我需要将哪些内容添加到项目中,以便Application可以在运行时找到Opencv Mat类定义? 我只想使用OpenCV Mat类型而不是其他任何东西。 我已经阅读了有关设置OpenCV Android的教程,但这些需要在Android设备上安装OpenCV Manager应用程序,但这对我来说可能是一个问题,因为我无法访问将安装我的应用程序的设备和OpenCV Manager App不会安装在这些设备上。 相反,是否只有一个’.so’库可以添加到我的Android Studio项目中,它将与我的项目捆绑在一起,并允许应用程序在运行时找到所需的Mat类,这就是我需要的所有内容? 提前致谢。

如何在Android OpenCV中执行图像RGB规范化?

我正在尝试使用OpenCV 2.4.8 for Android执行图像规范化。 我的测试设备是三星S3。 我已经编写了如下所示的JNI函数来执行图像规范化。 我对图像规范化的定义如下: r’ is 255* r/(r+g+b) g’ is 255* g/(r+g+b) b’ is 255* b/(r+g+b) 现在我需要实现这一点。 我写了一个函数来执行此操作。 这似乎不起作用。 我对我的应用程序的其他部分充满信心(即它们没有bug)。 只有这部分会导致问题。 我可能没有正确编写此function。 请帮忙。 我还附上了我的结果截图。 如果你看一下这个图像,只有一半看起来是标准化的(但它实际上没有标准化,只是看起来那样)而另一半看不到。 为了解决这个问题,我尝试在for循环中使用cols更改行,结果是相同的。 还提供了此代码。 期待一些帮助。 (仅供参考 – 我对openCV来说是全新的)。 感谢您的理解。 void NormalizeRGB(JNIEnv*, jobject, jlong img) { Mat& imgM = *(Mat*)img; vector rgb; int cols = imgM.cols; int rows = imgM.rows; […]

旋转和平移矩阵来自单应性opencv

我正在使用java中的android应用程序,我使用findHomography()使用opencv计算单应性,我如何通过单应性找到包含旋转和平移的相机姿势矩阵 Mat homography = Calib3d.findHomography(ReferencePoints2, ReferencePoints1,0,Calib3d.RANSAC);

使用来自相机和opencv库的图像估算欧拉天使(相机姿势)

我正在开发一个Android应用程序,我需要使用来自摄像头和opencv库的图像估算3D计划中的在线摄像头旋转。 我喜欢计算欧拉角。 我已经阅读了这个和这个页面 ,我可以像这里一样估计单应矩阵。 我的第一个问题是,我是否真的应该从相机校准中了解相机固有矩阵,还是单应矩阵(相机外部)足以估算欧拉角(俯仰,滚转,偏航)? 如果单应矩阵足够,我该怎么做呢? 对不起,我是opencv的初学者,无法将单词的“Mat”分解为旋转矩阵和翻译矩阵,如此处所述。 如何在android中实现euler角度? 你可以使用solvePnPRansac()和decomposeProjectionMatrix来查看我的代码来计算欧拉角。 但它只返回一个null-vector,因为double [] eulerArray = {0,0,0}! 有人可以帮帮我吗?! 有什么问题? 非常感谢您的回复! public double[] findEulerAngles(MatOfKeyPoint keypoints1, MatOfKeyPoint keypoints2, MatOfDMatch matches){ KeyPoint[] k1 = keypoints1.toArray(); KeyPoint[] k2 = keypoints2.toArray(); List matchesList = matches.toList(); List referenceKeypointsList = keypoints2.toList(); List sceneKeypointsList = keypoints1.toList(); // Calculate the max and min distances between keypoints. double […]

Android Phone Ip网络摄像头应用程序无法在java中使用openCV

我下载了Ip网络摄像头应用程序直接将video流式传输到java中的openCv,我尝试使用this.videoCapture.open(“http://192.168.43.1:8080/video”);连接它this.videoCapture.open(“http://192.168.43.1:8080/video”); 如下图所示 但我没有得到任何东西,但它适用于this.videoCapture.open(0); 使用我的网络摄像头。我也尝试了这个链接上的所有内容,将url更改为http://192.168.43.1:8080/video.mjpg和http://192.168.43.1:8080/video.mjpeg但没有正面结果。

使用OpenCV扫描文档

我正在开发类似于此的 Android文档扫描程序。 我搜索了这个,发现这可以用OpenCV实现,所以从OpenCV开始。 我尝试了很多例子从图像中检测文档,但无法检测图像是否有浅色背景。 检查样品图像以进行测试。 我正在使用OpenCV Android SDK并使用java代码进行图像处理。 这是代码: public void scanDocument(Bitmap mBitmap) { Mat mOriginalMat = convertToMat(mBitmap); int mRatio = getRadio(mOriginalMat); Size mSize = getImageFitSize(mOriginalMat, mRatio); Mat resizedMat = resizeMat(mOriginalMat, mSize); Mat colorMat = grayMat(resizedMat, mSize); Mat blurMat = medianBlurMat(colorMat, mSize); Mat thresholdMat = cannyEdgeMat(blurMat, mSize); ArrayList contourList = findContours(thresholdMat, Imgproc.RETR_LIST, Imgproc.CHAIN_APPROX_SIMPLE); double maxArea […]

OpenCV的FrameGrabber的输出图像不正确

我正在开发一个依赖于手指检测的OpenCV项目。 目前我有一个OpenCVFrameGrabber ,它抓取一个帧并将其放在一个IplImage 。 然后我将该图像绘制到我的GUI上。 这一切都有效,但即使我有彩色相机,绘制的图像似乎是黑白的。 图像中有明显的垂直线,当有一些颜色时,它似乎被分成沿这些线的分量。 有谁知道获取原始网络摄像头图像的方法?

如何在OpenCV Java中检测来自HoughLines变换的矩形

我知道这是重复的post,但仍然坚持实施。 我在互联网上关注如何在OpenCV和Java中检测图像中的文档。 我提出的第一个方案是在预处理后使用findContours进行一些图像处理,如模糊,边缘检测,在获得所有轮廓后,我可以找到最大的轮廓并假设这是一个我正在寻找的矩形但是它失败了在某些情况下,例如文档没有完全像缺少一个角落。 在尝试了几次和一些新处理但根本不起作用之后,我发现HoughLine转换更容易。 从现在开始,我在图像中有所有线条,但仍然不知道接下来要做什么来定义我想要的兴趣矩形。 这是我到目前为止的实现代码: 方法1:使用findContours Mat grayImage = new Mat(); Mat detectedEdges = new Mat(); // convert to grayscale Imgproc.cvtColor(frame, grayImage, Imgproc.COLOR_BGR2GRAY); // reduce noise with a 3×3 kernel // Imgproc.blur(grayImage, detectedEdges, new Size(3, 3)); Imgproc.medianBlur(grayImage, detectedEdges, 9); // Imgproc.equalizeHist(detectedEdges, detectedEdges); // Imgproc.GaussianBlur(detectedEdges, detectedEdges, new Size(5, 5), 0, 0, Core.BORDER_DEFAULT); Mat edges = […]

OpenCV getPerspectiveTransform和warpPerspective Java

我目前有一个ArrayList ,它存储图像的轮廓,并检索出最大的轮廓,这是我的warpPerspective的目标。 List contours = new ArrayList(); Imgproc.findContours(matOut, contours, new Mat(), Imgproc.RETR_LIST, Imgproc.CHAIN_APPROX_SIMPLE); sort(contours); MatOfPoint2f m2f = MatOfPoint2f(contours.get(0).toArray()); double arc = Imgproc.arcLength(m2f, true); MatOfPoint2f approx = new MatOfPoint2f(); Imgproc.approxPolyDP(m2f, approx, arc*0.02, true); 我在如何使用getPerspectiveTransform然后应用warpPerspective来更改图像以使其适合450×450图像时遇到问题。 我在python中找到了一个相当不错的例子,但是我对它不是很熟悉有人可以解释一下我将如何在java中进行纠正? def rectify(h): ”’ this function put vertices of square we got, in clockwise order ”’ h = h.reshape((4,2)) hnew = np.zeros((4,2),dtype […]