小编1''*_*1''的帖子

不满意的链接错误 - 适用于Android的OpenCV非本机

几天前,我询问了一个UnsatisfiedLinkError来自非原生OpenCV代码的问题.我认为在重新安装Eclipse并关闭/重新打开所有软件包之后问题就解决了,但是在我将OpenCV代码放入现有onCreate()方法之后它又回来了.

我创建了一个名为Start的活动的新Android应用程序.然后我去了项目属性并将OpenCV添加为库.这是activity(Start.java)的代码:

package com.test;

import org.opencv.core.Mat;
import org.opencv.highgui.Highgui;

import android.os.Bundle;
import android.app.Activity;
import android.app.AlertDialog;
import android.view.Menu;

public class Start extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_start);

        Mat Image = Highgui.imread("/image.jpg");
        if (Image == null) {
            AlertDialog ad = new AlertDialog.Builder(this).create(); 
            ad.setMessage("Fatal error: can't open /image.jpg!");  
        }
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_start, menu);
        return true;
    }
}
Run Code Online (Sandbox Code Playgroud)

这是日志:

08-13 12:26:14.791: E/Trace(1067): error opening trace file: No …
Run Code Online (Sandbox Code Playgroud)

android opencv unsatisfiedlinkerror

16
推荐指数
3
解决办法
3万
查看次数

如何获取Android相机预览数据?

我的相机应用程序在屏幕上显示相机预览,并在后台处理它.以下是相关代码,尽可能压缩(例如,没有显示错误处理或字段声明):

public final class CameraView extends SurfaceView implements
          SurfaceHolder.Callback, Runnable, PreviewCallback {

    public CameraView(Context context, AttributeSet attrs) {
        super(context, attrs);
        mHolder = getHolder();
        mHolder.addCallback(this);
        mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); 

    void openCamera() {
        // Called from parent activity after setting content view to CameraView
        mCamera = Camera.open();
        mCamera.setPreviewCallbackWithBuffer(this);
    }

    public void surfaceCreated(SurfaceHolder holder) {
        new Thread(this).start(); 

        // Set CameraView to the optimal camera preview size

        final Camera.Parameters params = mCamera.getParameters();
        final List<Camera.Size> sizes = params.getSupportedPreviewSizes();
        final int screenWidth = ((View) getParent()).getWidth();
        int minDiff = Integer.MAX_VALUE; …
Run Code Online (Sandbox Code Playgroud)

android android-camera

15
推荐指数
1
解决办法
2万
查看次数

数字识别的建议

我正在编写一个Android应用程序来从图片中提取数独谜题.对于9x9 Sudoku网格中的每个单元格,我需要确定它是否包含数字1到9之一或是空白.我从像这样的Sudoku开始:

在此输入图像描述

我使用OpenCV预处理数独,以提取各个数字的黑白图像,然后通过Tesseract将它们放入.但Tesseract有一些限制:

  1. Tesseract很大,包含许多我不需要的功能(即全文识别),并且需要英语培训数据才能运行,我认为必须将其放到设备的SD卡上.至少我可以告诉它只使用数字查找数字tesseract.setVariable("tessedit_char_whitelist", "123456789");
  2. Tesseract经常将单个数字误解为一串数字,通常包含换行符.它有时也只是简单地弄错了.以下是上述数独的几个例子:

在此输入图像描述

我有三个问题:

  1. 有什么方法可以克服Tesseract的局限性吗?
  2. 如果没有,那么检测在Android上实现的个别数字(不是k-最近邻居)的有用,准确的方法是什么- 这可以是免费的库或DIY解决方案.
  3. 如何改进预处理以定位该方法?一种可能性,我认为是利用细化算法,通过所建议的这个帖子,但我不会去打扰实现它,除非它会有所作为.

ocr android opencv tesseract image-processing

14
推荐指数
1
解决办法
5281
查看次数

Android OpenCV对象检测

我试图在Android上实现这样的东西:http://www.youtube.com/watch?v = zjxWpKCQqJc.

这是我的代码:

public Mat onCameraFrame(CvCameraViewFrame inputFrame) {
    Mat novo = new Mat();
    Mat resp = new Mat();
    Mat homer = new Mat();

    //resp = inputFrame.gray();
    novo = inputFrame.gray();

    Mat lido = new Mat();
    try {
        lido = Utils.loadResource(this, R.drawable.homer);
    } catch (IOException e) {
        e.printStackTrace();
    }
    Imgproc.cvtColor(lido, homer, Imgproc.COLOR_RGB2GRAY);

    FeatureDetector surf = FeatureDetector.create(FeatureDetector.FAST);

    MatOfKeyPoint keypointsHomer = new MatOfKeyPoint();
    MatOfKeyPoint keypoints = new MatOfKeyPoint();

    surf.detect(homer, keypointsHomer);
    surf.detect(novo, keypoints);

    DescriptorExtractor SurfExtractor = DescriptorExtractor.create(FeatureDetector.SURF);

    Mat descriptors = new …
Run Code Online (Sandbox Code Playgroud)

android opencv image-processing

14
推荐指数
0
解决办法
2万
查看次数

OpenCV - 在二进制图像中找到最大blob的边界框

使用OpenCV查找二进制图像中最大blob的边界框的最有效方法是什么?不幸的是,OpenCV没有特定的blob检测功能.我应该只使用findContours()并搜索列表中最大的?

opencv image-processing feature-detection

14
推荐指数
2
解决办法
3万
查看次数

OpenCV - 洪水填充到新Mat

给定图像上的一个点,我想要填充连接到该点的所有点 - 但是要填充到新图像上.一种天真的方法是将原始图像填充到特殊的魔术颜色值.然后,访问每个像素,并将具有此魔术颜色值的所有像素复制到新图像.肯定有更好的办法!

opencv image-processing flood-fill

13
推荐指数
1
解决办法
2万
查看次数

为什么复制> = 16 GB的Numpy数组会将其所有元素设置为0?

在我的Anaconda Python发行版上,复制一个16 GB或更大的Numpy数组(无论dtype如何)都会将副本的所有元素设置为0:

>>> np.arange(2 ** 31 - 1).copy()  # works fine
array([         0,          1,          2, ..., 2147483644, 2147483645,
       2147483646])
>>> np.arange(2 ** 31).copy()  # wait, what?!
array([0, 0, 0, ..., 0, 0, 0])
>>> np.arange(2 ** 32 - 1, dtype=np.float32).copy()
array([  0.00000000e+00,   1.00000000e+00,   2.00000000e+00, ...,
         4.29496730e+09,   4.29496730e+09,   4.29496730e+09], dtype=float32)
>>> np.arange(2 ** 32, dtype=np.float32).copy()
array([ 0.,  0.,  0., ...,  0.,  0.,  0.], dtype=float32)
Run Code Online (Sandbox Code Playgroud)

这是np.__config__.show()为了这个分布:

blas_opt_info:
    library_dirs = ['/users/username/.anaconda3/lib']
    define_macros = [('SCIPY_MKL_H', None), ('HAVE_CBLAS', None)]
    include_dirs = ['/users/username/.anaconda3/include'] …
Run Code Online (Sandbox Code Playgroud)

python numpy intel-mkl

12
推荐指数
1
解决办法
248
查看次数

Camerainfo.orientation给出了错误的答案

Android提供此代码,使相机预览面朝上显示所有相机和屏幕方向:

public static void setCameraDisplayOrientation(Activity activity,
         int cameraId, android.hardware.Camera camera) {
     android.hardware.Camera.CameraInfo info =
             new android.hardware.Camera.CameraInfo();
     android.hardware.Camera.getCameraInfo(cameraId, info);
     int rotation = activity.getWindowManager().getDefaultDisplay()
             .getRotation();
     int degrees = 0;
     switch (rotation) {
         case Surface.ROTATION_0: degrees = 0; break;
         case Surface.ROTATION_90: degrees = 90; break;
         case Surface.ROTATION_180: degrees = 180; break;
         case Surface.ROTATION_270: degrees = 270; break;
     }

     int result;
     if (info.facing == Camera.CameraInfo.CAMERA_FACING_FRONT) {
         result = (info.orientation + degrees) % 360;
         result = (360 - result) % 360;  // compensate …
Run Code Online (Sandbox Code Playgroud)

android android-camera

11
推荐指数
0
解决办法
1736
查看次数

setPreviewDisplay vs setPreviewTexture

打开Android摄像头时,必须分别使用setPreviewDisplay()(API级别1)或setPreviewTexture()(API级别11)设置SurfaceHolder或OpenGL SurfaceTexture来保存显示的图像.速度,设备兼容性(除了API级别)或两者之间的图像质量有什么不同吗?

android android-camera

11
推荐指数
1
解决办法
5572
查看次数

模糊图像的阈值 - 第2部分

如何对此模糊图像进行阈值处理以使数字尽可能清晰?

在上一篇文章中,我尝试自适应地对模糊图像进行阈值处理(左图),这会导致数字失真和断开(右图):

在此输入图像描述

从那时起,我已经使用如所描述的形态学闭运算试图此篇使图像均匀的亮度:

在此输入图像描述

如果我自适应地对此图像进行阈值处理,则不会获得明显更好的结果.但是,由于亮度大致均匀,我现在可以使用普通阈值:

在此输入图像描述

这比以前好多了,但我有两个问题:

  1. 我不得不手动选择阈值.尽管关闭操作导致均匀的亮度,但是对于其他图像,亮度水平可能不同.
  2. 在阈值水平略有变化的情况下,图像的不同部分会做得更好.例如,左上角的9和7部分褪色并且应该具有较低的阈值,而6中的一些已经融合成8s并且应该具有更高的阈值.

我认为回到自适应阈值,但是具有非常大的块大小(图像的1/9)将解决这两个问题.相反,我最终得到一个奇怪的"光环效应",其中图像的中心更亮,但边缘与正常阈值图像大致相同:

在此输入图像描述

编辑:remi 建议在形态上打开这篇文章右上角的阈值图像.这不太好用.使用椭圆内核,只有3x3足够小,以避免完全消除图像,即使这样,数字也会有明显的破损:

在此输入图像描述

Edit2:mmgp 建议使用维纳滤镜来消除模糊.我将此代码用于OpenCV中的Wiener过滤到OpenCV4Android,但它使图像更加模糊!这是使用我的代码和5x5内核过滤之前(左)和之后的图像:

在此输入图像描述

这是我改编的代码,它就地过滤:

private void wiener(Mat input, int nRows, int nCols) { // I tried nRows=5 and nCols=5

    Mat localMean = new Mat(input.rows(), input.cols(), input.type());
    Mat temp = new Mat(input.rows(), input.cols(), input.type());
    Mat temp2 = new Mat(input.rows(), input.cols(), input.type());

    // Create the kernel for convolution: a constant matrix with nRows rows 
    // and nCols cols, normalized so that the sum of the …
Run Code Online (Sandbox Code Playgroud)

opencv image-processing threshold

10
推荐指数
4
解决办法
6329
查看次数