标签: javacv

使用Java或Python从我的网络摄像头捕获单个图像

我想从我的网络摄像头捕获单个图像并将其保存到磁盘.我想用Java或Python(最好是Java)来做这件事.我想要一些适用于64位Win7和32位Linux的东西.

编辑:我使用Python 3.x,而不是2.x.

因为在其他任何地方我都看到这个问题让人们感到困惑,我将明确陈述一些事情:

  • 我不想使用Processing
  • 我不想使用除上述语言之外的任何语言
  • 我想以任何方式,形状或形式在屏幕上显示此图像
  • 我不想在屏幕上显示网络摄像头的实时视频,也不想将这样的视频保存到我的硬盘中
  • Java Media Framework太过时了.不建议.
  • 我宁愿不使用JavaCV,但如果我绝对必须,我想确切地知道我需要OpenCV库中的哪些文件,以及如何在不包含整个库的情况下使用这些文件(并且最好不要将这些文件放在任何类型的路径.一切都应该包含在一个目录中)
  • 如果需要,我可以在64位Win7计算机上使用Eclipse,但我也必须能够在32位Linux上编译和使用它.
  • 如果您认为我可能会或可能不会以任何形式或形式了解与此主题相关的内容,请假设我不知道,并告诉我

EDIT2:我能够使用Python 2.7和pygame 1.9.1让Froyo的pygame示例在Linux上运行.pygame.camera.camera_list()调用不起作用,但对于示例的其余部分则没有必要.但是,我不得不调用cam.set_controls()(你可以在这里找到http://www.pygame.org/docs/ref/camera.html的文档)来提高亮度,这样我才真正看到了我捕获的图像.

此外,我需要调用cam.get_image()和pygame.image.save()方法三次,然后我认为第一对调用的图像实际上被保存了.他们似乎陷入了一个奇怪的缓冲区.基本上,我不是一次调用cam.get_image(),而是每次想要捕获图像时都要调用它三次.然后我才调用pygame.image.save().

不幸的是,如下所述,pygame.camera仅在Linux上受支持.我仍然没有Windows的解决方案.

python java webcam image-capture javacv

38
推荐指数
4
解决办法
11万
查看次数

在二进制对象内填充孔

我有一个问题,在黑色硬币内填充白洞,以便我只能有0-255二进制图像与填充黑色硬币..我使用中位数过滤器来完成它但在那种情况下硬币之间的连接桥增长,这是不可能的经过几次侵蚀后识别它们......所以我需要在opencv中使用简单的floodFill方法

这是我带孔的图片:

在此输入图像描述

编辑:类似函数的floodfill必须填充大组件中的空洞而不提示X,Y坐标作为种子......

编辑:我试图使用cvDrawContours函数,但我没有在更大的内部填充轮廓.

这是我的代码:

        CvMemStorage mem = cvCreateMemStorage(0);
        CvSeq contours = new CvSeq();
        CvSeq ptr = new CvSeq();
        int sizeofCvContour = Loader.sizeof(CvContour.class);

        cvThreshold(gray, gray, 150, 255, CV_THRESH_BINARY_INV);

        int numOfContours = cvFindContours(gray, mem, contours, sizeofCvContour, CV_RETR_CCOMP, CV_CHAIN_APPROX_SIMPLE);
        System.out.println("The num of contours: "+numOfContours); //prints 87, ok

        Random rand = new Random();
        for (ptr = contours; ptr != null; ptr = ptr.h_next()) {
            Color randomColor = new Color(rand.nextFloat(), rand.nextFloat(), rand.nextFloat());
            CvScalar color = CV_RGB( randomColor.getRed(), randomColor.getGreen(), randomColor.getBlue());
            cvDrawContours(gray, ptr, color, color, …
Run Code Online (Sandbox Code Playgroud)

opencv image-processing javacv

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

在纯Java中学习JavaCV

我正在努力学习JavaCV.众所周知,缺乏关于这一主题的教育材料是一个非常大的问题.在JavCV主页中,他们为"OpenCV CookBook"一书中的C++示例提供了大量示例.但情况是,他们不是Java,他们在SCALA !!!! 现在我已经疯了!我知道很多例子都在网上,但我想从头开始学习它,然后我才能正确地做到."OpenCV CookBook"是一本非常好的书,但它完全是关于C++中的OpenCV,而不是关于Java的.

有人请帮我找个更好的学习JavaCV的地方.提供我,URL,书籍等等.但它必须是在100%Java中学习JavaCV,而不是在Scala,C++,C或其他任何语言中学习!请帮忙!

java opencv javacv

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

使用OpenCV进行不稳定的人脸识别

我正在开发一个用于人脸识别的Android应用程序,使用JavaCV,它是OpenCV的非官方包装器.导入后com.googlecode.javacv.cpp.opencv_contrib.FaceRecognizer,我应用并测试以下已知方法:

  • LBPH使用createLBPHFaceRecognizer()方法
  • FisherFace使用createFisherFaceRecognizer()方法
  • EigenFace使用createEigenFaceRecognizer()方法

在我识别出检测到的脸部之前,我会校正旋转的脸部并裁剪出适当的区域,从而激发了这种方法

一般情况下,当我传递相机时,数据库中已存在一个面,识别就可以了.但这并不总是正确的.有时它很有可能识别未知面部(在训练样本的数据库中找不到).当我们在DB中有两个或更多相似特征的面孔(胡须,小胡子,眼镜......)时,这些面孔之间的识别可能会非常错误!

要使用测试面部图像预测结果,我应用以下代码:

public String predict(Mat m) {

        int n[] = new int[1];
        double p[] = new double[1];
        IplImage ipl = MatToIplImage(m,WIDTH, HEIGHT);

        faceRecognizer.predict(ipl, n, p);

        if (n[0]!=-1)
         mProb=(int)p[0];
        else
            mProb=-1;
            if (n[0] != -1)
            return labelsFile.get(n[0]);
        else
            return "Unkown";
    }
Run Code Online (Sandbox Code Playgroud)

我无法控制概率p的阈值,因为:

  • 小p <50可以预测正确的结果.
  • 高p> 70可以预测错误结果.
  • 中间p可以预测正确或错误.

同样,我不明白为什么在使用LBPH时,为什么predict()函数有时会出现大于100的概率?在Fisher和Eigen的情况下,它给出了非常大的值(> 2000)?? 有人可以帮助找到这些奇怪问题的解决方案吗?是否有任何建议可以提高认可的稳健性?特别是在两个不同面孔相似的情况下.

以下是使用Facerecognizer的整个类:

package org.opencv.javacv.facerecognition;

import static  com.googlecode.javacv.cpp.opencv_highgui.*;
import static  com.googlecode.javacv.cpp.opencv_core.*;

import static  com.googlecode.javacv.cpp.opencv_imgproc.*;
import static com.googlecode.javacv.cpp.opencv_contrib.*;

import java.io.File;
import java.io.FileOutputStream;
import java.io.FilenameFilter; …
Run Code Online (Sandbox Code Playgroud)

java android opencv face-recognition javacv

22
推荐指数
1
解决办法
7178
查看次数

为什么cvFindContours()方法在javacv中没有正确检测轮廓?

我在StackOverflow中经历了很多问题,能够开发小程序来正确检测正方形和矩形.这是我的示例代码

public static CvSeq findSquares(final IplImage src, CvMemStorage storage) {
    CvSeq squares = new CvContour();
    squares = cvCreateSeq(0, sizeof(CvContour.class), sizeof(CvSeq.class), storage);
    IplImage pyr = null, timg = null, gray = null, tgray;
    timg = cvCloneImage(src);
    CvSize sz = cvSize(src.width(), src.height());
    tgray = cvCreateImage(sz, src.depth(), 1);
    gray = cvCreateImage(sz, src.depth(), 1);
    // cvCvtColor(gray, src, 1);
    pyr = cvCreateImage(cvSize(sz.width() / 2, sz.height() / 2), src.depth(), src.nChannels());
    // down-scale and upscale the image to filter out the noise
    // cvPyrDown(timg, pyr, CV_GAUSSIAN_5x5);
    // …
Run Code Online (Sandbox Code Playgroud)

java opencv javacv

19
推荐指数
1
解决办法
2593
查看次数

OpenCV(JavaCV)与OpenCV(C/C++接口)

我只是想知道在使用JavaCV而不是OpenCV的C/C++实现时,在给定的一组机器上是否会有相对显着的速度性能优势.

如果我错了,请纠正我,但我的理解是opencv的c/c ++实现更接近于机器,因为OpenCV的Java实现,JavaC,将具有轻微的速度性能劣势(以毫秒为单位),因为将源代码转换为字节码的虚拟机,然后转换为机器代码.然而,使用c/c ++,它会直接转换为机器代码,因此不会承载虚拟机开销的中间步骤.

如果我犯了错误,请不要在这里杀了我; 我只是在学习,并欢迎建设性的批评.

谢谢

c c++ java opencv javacv

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

UnsatisfiedLinkError:java.library.path中没有opencv_java249

遇到一些问题,在我的mac上运行一段代码.有人给我写了一个图像分析java应用程序,但我试图在netbeans上运行它时不断收到此错误.

run:线程"main"中的异常java.lang.UnsatisfiedLinkError:在java.lang.ClassLoader.loadLibrary(ClassLoader.java:1857)的java.library.path中没有opencv_java249,位于java.lang.Runtime.loadLibrary0(Runtime.java: 870)在java.lang.System.loadLibrary(System.java:1119)at image.prossing.Test.main(Test.java:28)Java结果:1 BUILD SUCCESSFUL(总时间:0秒)

有netbeans项目,并添加必要的jar文件作为库.程序员告诉我下载正确的OpenCV版本并将opencv.dll文件复制到我的java/jre/bin文件夹中.但我找不到dll文件或java/jre文件夹.我知道大多数编程都出现在Windows上是有原因的.希望有人可以帮我解决这个问题并在我的mac上运行这个应用程序.

这是代码的第一部分,最有可能创建错误的部分:

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package image.prossing;

/**
 *
 * @author Dumith Salinda
 */
import java.util.ArrayList;
import java.util.List;
import org.opencv.core.Core;
import static org.opencv.core.Core.FONT_HERSHEY_SIMPLEX;
import org.opencv.core.Mat;
import org.opencv.core.MatOfPoint;
import org.opencv.core.Point;
import org.opencv.core.Rect;
import org.opencv.core.Scalar;
import org.opencv.highgui.Highgui;
import org.opencv.imgproc.Imgproc;

public class Test {

public static void main(String[] …
Run Code Online (Sandbox Code Playgroud)

java opencv javacv

17
推荐指数
4
解决办法
4万
查看次数

使用Ffmpeg设置视频流元数据

我正在使用JavaCV FFmpegFrameRecorder类将Android的相机预览帧编码为视频.

目标是复制以下命令行的结果:

ffmpeg -i input.mp4 -metadata:s:v:0 rotate="90" output.mp4
Run Code Online (Sandbox Code Playgroud)

我修改了startUnsafe()如下方法,但无法生成所需的输出:

if ((video_st = avformat_new_stream(oc, video_codec)) != null) {
        video_c = video_st.codec();
        video_c.codec_id(oformat.video_codec());
        video_c.codec_type(AVMEDIA_TYPE_VIDEO);
        ...
        AVDictionary avDictionary = new AVDictionary(null);
        av_dict_set(avDictionary, "rotate", "90", 0);
        video_st.metadata(avDictionaty);
        ...
}
...
avformat_write_header(oc, (PointerPointer) null);
Run Code Online (Sandbox Code Playgroud)

这仍然可以正确编码视频,但添加的元数据永远不会出现在ffprobe上.如果有帮助,视频编码为h264.

顺便说一句,这是ffprobe输出:

ffprobe version 2.3.3 Copyright (c) 2007-2014 the FFmpeg developers
  built on Jan 22 2015 18:22:57 with Apple LLVM version 6.0 (clang-600.0.56) (based on LLVM 3.5svn)
  configuration: --prefix=/usr/local/Cellar/ffmpeg/2.3.3 --enable-shared --enable-pthreads --enable-gpl --enable-version3 --enable-nonfree --enable-hardcoded-tables --enable-avresample --enable-vda …
Run Code Online (Sandbox Code Playgroud)

java video android ffmpeg javacv

17
推荐指数
1
解决办法
2248
查看次数

在android中检测录制视频的方向

我想制作我的自定义媒体播放器并需要视频的方向信息(用于检测它是从前置或后置摄像头录制的).对于jpeg图像我可以使用,ExifInterface.TAG_ORIENTATION但对于视频如何我可以找到这些信息.

我试图从视频文件中获取帧并将其转换为jpeg但是它总是0在所有情况下提供方向.

请帮我.提前致谢.

video android ffmpeg orientation javacv

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

JavaCV + Android Studio + gradle-可能吗?

我正在尝试将JavaCV与Android Studio和Gradle一起使用.我写了这样的代码片段:

   repositories {
    mavenCentral()
    maven {
        url "http://maven2.javacv.googlecode.com/git/"
    }
}

dependencies {
    compile files('libs/android-support-v4.jar')
    compile group: 'com.googlecode.javacpp', name: 'javacpp', version: '0.5'
    compile group: 'com.googlecode.javacv', name: 'javacv', version: '0.5'
}
Run Code Online (Sandbox Code Playgroud)

我在dir外部库中看到了导入的库.所以我试着运行这个:

...
  IplImage zdjecie=cvLoadImage(Environment.getExternalStorageDirectory().getPath()+ "/1.bmp");
    cvSaveImage(Environment.getExternalStorageDirectory().getPath()
    + "/2.bmp", zdjecie);
...
Run Code Online (Sandbox Code Playgroud)

我收到了错误:

Caused by: java.lang.UnsatisfiedLinkError: Couldn't load jniopencv_core: findLibrary returned null
Run Code Online (Sandbox Code Playgroud)

...因为我不知道我应该怎么处理opencv(和其他人).so文件.

那么我们应该如何在Android Studio中使用JavaCV?

android opencv javacv android-studio

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