我正在使用带有用于Android的预构建OpenCV库的JavaCV库.我想我已经以正确的方式设置了Eclipse,因为我已经将jar包括javacv.jar和javacpp.jar.另外,java-cv-android-arm.jar,在我的项目中.一切都编译好,没有错误,警告,任何应该怀疑在运行时会出错的东西.但是我得到下面这个方法体中抛出的NoClassDefFOundError异常:
@Override
public void draw(Canvas canvas)
{
try
{
canvas.drawColor(Color.BLUE);
if (current != null)
{
int width = current.getWidth();
int height = current.getHeight();
IplImage i = IplImage.create(width, height, IPL_DEPTH_8U, 1); // I assume here is where the exception gets thrown
ByteBuffer buffer = i.getByteBuffer();
current.copyPixelsToBuffer(buffer);
// We need a grayscale image in order to do the recognition, so
// we
// create a new image of the same size as the original one.
IplImage grayImage = IplImage.create(i.width(), i.height(),
IPL_DEPTH_8U, 1); …Run Code Online (Sandbox Code Playgroud) 我的网络摄像头有一个扭曲的快照.作为jpeg文件,内在矩阵和失真系数: -
matrix intrisic matrix
(1137.0919189453125,0.0,383.99273681640625)
(0.0,264.17974853515625,312.74951171875)
(0.0,0.0,1.0)
matrix distortion :-
(-0.26913660764694214)
(0.22259517014026642)
(-0.0928017795085907)
(0.26249778270721436)
Run Code Online (Sandbox Code Playgroud)
我不知道如何在CvMat中加载这些失真系数,以便使用这些失真系数获得无失真的图像.另外,我想只使用javacv这样做.
编辑: - 我也知道这个功能
IplImage mapx=cvCreateImage(cvSize(src_img),IPL_DEPTH_32F,1);
IplImage mapy=cvCreateImage(cvSize(src_img),IPL_DEPTH_32F,1);
cvInitUndistortMap(CvMat intrinsic,CvMat distortion, IplImage mapx, IplImage mapy);
cvRemap(IplImage tm,IplImage src,IplImage mapx,IplImage mapy,CV_INTER_LINEAR|CV_WARP_FILL_OUTLIERS,cvScalarAll(0));
Run Code Online (Sandbox Code Playgroud)
但我不知道如何初始化相应的cvMats的内在矩阵和失真系数.
我正在使用javacv包(Opencv)开发组件识别项目.我使用一种方法将图像上的矩形集返回为"CvSeq"我需要知道的是如何做以下事情
这是返回矩形的方法
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() & -2, src.height() & -2);
tgray = cvCreateImage(sz, src.depth(), 1);
gray = cvCreateImage(sz, src.depth(), 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);
cvPyrUp(pyr, timg, …Run Code Online (Sandbox Code Playgroud) 我编写了简单的代码来检索图像中的轮廓数,并获得图像中的轮廓数.但它总是给出错误的答案.有人可以解释一下吗?
import com.googlecode.javacpp.Loader;
import com.googlecode.javacv.CanvasFrame;
import static com.googlecode.javacpp.Loader.*;
import static com.googlecode.javacv.cpp.opencv_core.*;
import static com.googlecode.javacv.cpp.opencv_imgproc.*;
import static com.googlecode.javacv.cpp.opencv_highgui.*;
import java.io.File;
import javax.swing.JFileChooser;
public class TestBeam {
public static void main(String[] args) {
CvMemStorage storage=CvMemStorage.create();
CvSeq squares = new CvContour();
squares = cvCreateSeq(0, sizeof(CvContour.class), sizeof(CvSeq.class), storage);
JFileChooser f=new JFileChooser();
int result=f.showOpenDialog(f);//show dialog box to choose files
File myfile=null;
String path="";
if(result==0){
myfile=f.getSelectedFile();//selected file taken to myfile
path=myfile.getAbsolutePath();//get the path of the file
}
IplImage src = cvLoadImage(path);//hear path is actual path to …Run Code Online (Sandbox Code Playgroud) 我想FaceRecognition通过javacv包装器库在java中使用OpenCV .我不知道如何传递图像和标签com.googlecode.javacv.cpp.opencv_contrib.FaceRecognizer.train(CvArr, CvArr)
我可以使用cvLoadImage(String)或cvLoadImageM(String)获取单张图片,但我该如何制作CvArr呢?
我有一个400x400图像的图像,以识别它的不同组件.但是当我尝试使用大部分时间识别组件时,它无法提供正确的答案.所以我需要知道javacv或opencv中是否有某种方法可以提高图像质量或增加图像大小而不影响图像质量?
这是我使用的示例图像.(这是我可以获得的最大尺寸,我不能在项目中使用任何照片编辑软件,因为它是动态生成的图像.)

在我的图像处理中,我需要识别连接这些方块的正方形和矩形.特别是我需要获得那些使用像素值的宽度和高度.
我的目标是将过滤器(灰度,复古,对比度,锐化,模糊,平滑等)应用于JavaCv的iplImage.在这样做时,我遇到了这些函数/类:iplImage,CvMat,cvInRangeS,cvCvtColor,cvSmooth.我想就这些问题寻求澄清.以下是我的具体问题:
我知道有很多类似的问题,但由于JavaCV等库的开发,很多问题似乎已经过时了.
我使用Android中的视频创作与图像和音频的代码来创建电影,但我有lib导入的问题.
我在JavaCV页面上写道,我把依赖放在gradle中:
compile group: 'org.bytedeco', name: 'javacv', version: '0.9'
Run Code Online (Sandbox Code Playgroud)
现在,我不知道我是否还要做别的事情?
我用过这些进口:
import org.bytedeco.javacpp.avcodec;
import org.bytedeco.javacpp.opencv_core.IplImage;
import org.bytedeco.javacv.FFmpegFrameRecorder;
import static org.bytedeco.javacpp.opencv_highgui.cvLoadImage;
Run Code Online (Sandbox Code Playgroud)
并得到此错误:
Caused by: java.lang.NoClassDefFoundError: java.lang.ClassNotFoundException: org.bytedeco.javacpp.avutil
at org.bytedeco.javacpp.Loader.load(Loader.java:387)
at org.bytedeco.javacpp.Loader.load(Loader.java:353)
at org.bytedeco.javacpp.avformat.<clinit>(avformat.java:13)
at org.bytedeco.javacv.FFmpegFrameRecorder.<clinit>(FFmpegFrameRecorder.java:106)
at voidstudio.app.activity.CreateMovieTask.doInBackground(CreateMovieTask.java:46)
at voidstudio.app.activity.CreateMovieTask.doInBackground(CreateMovieTask.java:21)
Run Code Online (Sandbox Code Playgroud)
和
Caused by: java.lang.ClassNotFoundException: org.bytedeco.javacpp.avutil
at java.lang.Class.classForName(Native Method)
at java.lang.Class.forName(Class.java:217)
Run Code Online (Sandbox Code Playgroud)
和
Caused by: java.lang.UnsatisfiedLinkError: Couldn't load jniavutil from loader dalvik.system.PathClassLoader[dexPath=/data/app/voidstudio.app-1.apk,libraryPath=/data/app-lib/voidstudio.app-1]: findLibrary returned null
at java.lang.Runtime.loadLibrary(Runtime.java:365)
at java.lang.System.loadLibrary(System.java:521)
at org.bytedeco.javacpp.Loader.loadLibrary(Loader.java:535)
at org.bytedeco.javacpp.Loader.load(Loader.java:410)
Run Code Online (Sandbox Code Playgroud)
我错过了配置吗?我看过类似的问题,但没有正确的答案.
我正在学习如何使用带有Java API的opencv来使用积分图像,并且我创建了一个测试,该测试在使用积分图像之前和使用积分图像之后显示灰度图像。灰度图像是10 x 10,当我将其转换为积分图像时,我发现它为11 x 11,具有额外的零行和零列,如下面的输出所示。
请让我知道为什么积分图像包含额外的零行和零列吗?
代码:
public static void main(String[] args) {
MatFactory matFactory = new MatFactory();
FilePathUtils.addInputPath(path_Obj);
Mat bgrMat = matFactory.newMat(FilePathUtils.getInputFileFullPathList().get(0));
Mat gsImg = SysUtils.rgbToGrayScaleMat(bgrMat);
Log.D(TAG, "MainClas", "gsImg.dump(): " + gsImg.dump());
Mat integralMat = new Mat();
Imgproc.integral(gsImg, integralMat, CvType.CV_32F);
Log.D(TAG, "MainClas", "sumMat.dump(): " + integralMat.dump());
}
Run Code Online (Sandbox Code Playgroud)
输出:
1: Debug: MainClass -> MainClas: gsImg.dump(): [2, 1, 7, 5, 1, 11, 2, 7, 9, 11;
1, 2, 0, 0, 3, 20, 17, 5, 7, 8;
4, 8, …Run Code Online (Sandbox Code Playgroud) 我编译了面部识别并成功运行在LG Leon(armv7I)上.当我在具有类似CPU架构(armv7I)的MyPhone UNO上安装应用程序时,会出现以下错误:
06-03 22:09:41.538 30619-30619/org.opencv.javacv.facerecognition E/AndroidRuntime: FATAL EXCEPTION: main
Process: org.opencv.javacv.facerecognition, PID: 30619
java.lang.UnsatisfiedLinkError: dlopen failed: library "../../lib/libtbb.so" not found
at java.lang.Runtime.loadLibrary(Runtime.java:372)
at java.lang.System.loadLibrary(System.java:1076)
at com.googlecode.javacpp.Loader.loadLibrary(Loader.java:593)
at com.googlecode.javacpp.Loader.load(Loader.java:489)
at com.googlecode.javacpp.Loader.load(Loader.java:431)
at com.googlecode.javacv.cpp.opencv_core.<clinit>(opencv_core.java:136)
at java.lang.Class.classForName(Native Method)
at java.lang.Class.forName(Class.java:324)
at com.googlecode.javacpp.Loader.load(Loader.java:453)
at com.googlecode.javacv.cpp.opencv_imgproc.<clinit>(opencv_imgproc.java:97)
at java.lang.Class.classForName(Native Method)
at java.lang.Class.forName(Class.java:324)
at com.googlecode.javacpp.Loader.load(Loader.java:453)
at com.googlecode.javacv.cpp.opencv_highgui.<clinit>(opencv_highgui.java:85)
at java.lang.Class.classForName(Native Method)
at java.lang.Class.forName(Class.java:324)
at com.googlecode.javacpp.Loader.load(Loader.java:453)
at com.googlecode.javacv.cpp.opencv_calib3d.<clinit>(opencv_calib3d.java:94)
at java.lang.Class.classForName(Native Method)
at java.lang.Class.forName(Class.java:324)
at com.googlecode.javacpp.Loader.load(Loader.java:453)
at com.googlecode.javacv.cpp.opencv_contrib.<clinit>(opencv_contrib.java:104)
at org.opencv.javacv.facerecognition.PersonRecognizer.<init>(PersonRecognizer.java:44)
at org.opencv.javacv.facerecognition.FdActivity$1.onManagerConnected(FdActivity.java:109)
at org.opencv.android.AsyncServiceHelper$3.onServiceConnected(AsyncServiceHelper.java:320)
at …Run Code Online (Sandbox Code Playgroud)