Tag: opencv

BackgroundSubtractorMOG2中“history”的含义是什么?

我正在使用OpenCV for java(但这与我猜不相关)。 我正在使用BackgroundSubtractorMOG2类, 这里引用的(很差)。 我已经阅读并理解了Zivkovic关于算法的论文,你可以在这里找到。 BackgroundSubtractorMOG2在其构造函数中引入一个名为history的参数。 它是什么,它如何影响结果? 例如,你能指点我在论文中的参考吗? 从类源代码 106行,据说alpha = 1/history 。 这意味着历史就是论文中的T参数,即(或多或少)构成训练集的帧数。 然而,它似乎并非如此。 将构造函数中的值从10更改为500或更高,对最终结果没有影响 。 这就是我所说的: Mat result = new Mat(); int history = 10; //or 50, or 500, or whatever BackgroundSubtractorMOG2 sub = new BackgroundSubtractorMOG2(history, 16, false); for (….) { sub.apply(frame[i], result); } imshow(result); //let’s see last frame 我设定的历史无关紧要,无论是5,10,500,1000 – 结果总是一样的。 […]

在圆形霍夫变换中,什么是累加器分辨率的反比(dp)以及它如何影响圆检测?

OpenCV文档说明: dp:累加器分辨率与图像分辨率的反比。 例如,如果dp = 1,则累加器具有与输入图像相同的分辨率。 如果dp = 2,则累加器的宽度和高度都是一半。 但它没有说明该值的大小如何影响圆检测。 我认为累加器只是最大值的集合,它是如何具有分辨率的?

Android OpenCV简单形状检测应用程序圈错误

以下代码适用于正方形,但不适用于三角形。 为什么? 这是我的示例代码: public void onClick(View v) { ImageView resim = (ImageView)findViewById(R.id.imgview_gosterge); Bitmap image=((BitmapDrawable)resim.getDrawable()).getBitmap(); Bitmap bmp32 = image.copy(Bitmap.Config.ARGB_8888, true); Mat tmp = new Mat (bmp32.getHeight(), bmp32.getWidth(), CvType.CV_8U); //Utils.bitmapToMat(image, tmp); Utils.bitmapToMat(bmp32, tmp); bmp32.recycle(); Imgproc.cvtColor(tmp, tmp, Imgproc.COLOR_RGB2HSV, 4 ); tmp = findLargestRectangle(tmp); Bitmap bmp = Bitmap.createBitmap(tmp.cols(), tmp.rows(), Bitmap.Config.ARGB_8888); Utils.matToBitmap(tmp, bmp); //Utils.matToBitmap(tmp, image); ImageView resim2 = (ImageView)findViewById(R.id.imgview_gosterge2); resim2.setImageBitmap(bmp); […]

如何在Android中添加2个org.opencv.core.Point对象?

我是OpenCV和Android的新手。 我想将C ++代码转换为java line( img_matches, scene_corners[0] + Point2f( img_object.cols, 0), scene_corners[1] + Point2f( img_object.cols, 0), Scalar(0, 255, 0), 4 ); 这是它的最后一部分。 在这里,我用Core.line替换了一行() 但现在问题是在上面的代码中添加了这两点 。 scene_corners[0] + Point2f( img_object.cols, 0) 我替换了( scene_corners[0],Point2f( img_object.cols, 0) ) scene_corners.get(0),new Point(img_object.cols(),0) 由于两者都是org.opencv.core.Point类型对象,因此不支持这些类型的操作。 任何方式来转换它。 请帮帮我。 先谢谢你。

JavaCV从运行时的角度看OpenCV

我正在构建一个包含图像处理技术的Android应用程序。 从运行时的角度来看,哪个是更好的JavaCV还是OpenCV?

java.lang.UnsatisfiedLinkError:Native Library XXX.so已经加载到另一个类加载器中

我已经部署了一个Web应用程序,其中包含以下代码。 System.loadLibrary(org.opencv.core.Core.NATIVE_LIBRARY_NAME); 现在,我部署了另一个也具有相同代码的Web应用程序。 当它尝试加载库时,它会抛出以下错误。 Exception in thread “Thread-143” java.lang.UnsatisfiedLinkError: Native Library /usr/lib/jni/libopencv_java248.so already loaded in another classloader 我想同时运行这两个应用程序。 直到现在我尝试过: 在一个应用程序中加载库并将上述exception捕获到另一个应用程序 从两个应用程序中删除了jar并将opencv.jar放入Tomcat的类路径中(即在/ usr / share / tomcat7 / lib中)。 但上面没有一个工作,我可以做任何建议吗? 编辑:对于选项二, System.loadLibrary(Core.NATIVE_LIBRARY_NAME); 这条线有效,但在我实际使用该库时会出现exception。 那是我关注的时候 Mat mat = Highgui.imread(“/tmp/abc.png”); 我得到了这个例外 java.lang.UnsatisfiedLinkError: org.opencv.highgui.Highgui.imread_1(Ljava/lang/String;)J at org.opencv.highgui.Highgui.imread_1(Native Method) at org.opencv.highgui.Highgui.imread(Highgui.java:362)

基本矩阵的分解:validationR和T的四种可能解

我想使用OpenCV做一些Motion-from-Motion。 到目前为止,我有基本的矩阵和基本矩阵。 有了基本矩阵我正在做SVD以获得R和T. 我的问题是我有两种可能的R解决方案和两种可能的T解决方案,这导致整体姿势的4种解决方案,其中4种解决方案中只有一种是正确的解决方案。 我怎样才能找到正确的解决方案? 这是我的代码: private void calculateRT(Mat E, Mat R, Mat T){ Mat w = new Mat(); Mat u = new Mat(); Mat vt = new Mat(); Mat diag = new Mat(3,3,CvType.CV_64FC1); double[] diagVal = {1,0,0,0,1,0,0,0,1}; diag.put(0, 0, diagVal); Mat newE = new Mat(3,3,CvType.CV_64FC1); Core.SVDecomp(E, w, u, vt, Core.DECOMP_SVD); Core.gemm(u, diag, 1, vt, […]

Android应用程序上的Opencv canny边缘检测崩溃

我是新手使用OpenCV,当我尝试应用Canny探测器时,我的应用程序崩溃了。 我看过另一篇关于同样的post,但是我试了一下,没什么…… 我使用Android Studio 3.0,OpenCV 3.2.0,我的手机是Android 6.0.1。 这是我的代码。 我尝试了很多组合,当我尝试应用Canny探测器时总是失败。 请注意最后一个方法onCameraFrame …它适用于Rgba和Gray图像,但不适用于Canny: public class MainActivity extends AppCompatActivity implements CameraBridgeViewBase.CvCameraViewListener2{ private static String TAG = “MainActivity”; JavaCameraView javaCameraView; Mat mRgba, imgGray, imgCanny, wide; BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(this) { @Override public void onManagerConnected(int status){ switch(status){ case BaseLoaderCallback.SUCCESS:{ javaCameraView.enableView(); break; } default:{ super.onManagerConnected(status); break; } } } }; […]

用opencv java打开video文件

所以现在有OpenCV for Java …… ! 谁能告诉我如何用它打开Videofiles? 我试着看看整个互联网,但一无所获。 VideoCapture类的文档并不是非常有用,因为它提供了一个C#示例并展示了如何从网络摄像头捕获。 OpenCV的Q&A也没有帮助,因为没有(公共)方法可以给你一个文件名字符串。 但它应该像在API中编写的那样工作。 但它没有在VideoCapture类中有一个带有sting参数的privte方法。 请回答是否有解决方案,或者即使您遇到同样的问题。 garyee 更新:(2017年5月) 从版本3.0.0开始,VideoCapture类有一个构造函数,它接受一个字符串参数。 所以现在有一个简单的解决方案来解决这个问题!

如何在opencv for android中将ArrayList 从Java传递到本机端(NDK)

在Java方面,我有 List arystrdimages = new ArrayList(); 随后,从外部目录中的文件夹读取的图像被添加到列表中 for(File f:strdimgs) { Mat tempimg = Highgui.imread(f.getAbsolutePath(),CvType.CV_8UC1); arystrdimages.add(tempimg ); } 在Native jni方面,我想通过它的引用访问arystrdimages。 对于单个mat对象,我们可以通过调用getNativeObjAddr方法来实现,即在opencv4android示例中为Mat对象进行本机访问,如下所示 Java的 private Mat mRgba; 打电话给本地人 CallNative(mRgba.getNativeObjAddr()); 在原住民方面 JNIEXPORT void JNICALL Java_org_opencv_samples_tutorial2_Tutorial2Activity_CallNative(JNIEnv*, jobject, jlong addrRgba1){ Mat& mRgb = *(Mat*)addrRgba1; } 如何为List对象执行此操作? 编辑:实施您建议的解决方案 Java方面 int elems= arystrdimages.size(); Log.v(“Matobjdata”, “number of Matobject read = ” + elems); //Log.v(“Matobjdata”, […]