标签: opencvsharp

OpenCV.NET,OpenCVSharp和EmguCV有什么区别?

OpenCV.NET,OpenCVSharp和EmguCV有什么区别?

它们源自OpenCV.

那么,他们的设计,实施和应用理念有何不同?

opencv image-processing emgucv opencvsharp opencv3.0

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

Unity中的OpenCV(EMGUCV包装器)集成

如您所知,OpenCV是一个非常有用的库,可以让您在计算机视觉中做出惊人而强大的功能.所以,我通过一个很好的时间弄清楚如何使用它在Unity3d,我有很多的问题,并在网络搜索,我发现了几个建议,但没有一个为我工作.

  • 我正在使用Unity Pro 4.0
  • 此版本的Emgu CV(emgucv-windows-universal-gpu 2.4.9.1847)
  • 我对团结项目的目标是:windows而不是web player

opencv unity-game-engine emgucv opencvsharp

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

通过SVD从基本矩阵中提取翻译的正确方法

我校准了相机并找到了内在参数(K).我也计算了基本矩阵(F).

现在E = K_T*F*K. 到现在为止还挺好.

现在我们将基本矩阵(E)传递给SVD,使用分解值(U,W,V)来提取旋转和平移:

 essentialMatrix = K.Transpose().Mul(fund).Mul(K);
 CvInvoke.cvSVD(essentialMatrix, wMatrix, uMatrix, vMatrix, Emgu.CV.CvEnum.SVD_TYPE.CV_SVD_DEFAULT);
Run Code Online (Sandbox Code Playgroud)

**问题)此时,已经提出了两种方法,并且让我感到困惑的是哪一种方法确实给出了正确的答案 - 特别是对于翻译:

首先输入链接描述,作者建议计算R,T如下:

在此输入图像描述

但在第二种方法[ http://isit.u-clermont1.fr/~ab/Classes/DIKU-3DCV2/Handouts/Lecture16.pdf]中,作者为T提供了另一个公式,即+ U,-U,如下所示:

在此输入图像描述

我正在使用openCv库在C#.Net上实现它.谁知道哪个翻译公式是正确的?

opencv svd emgucv opencvsharp

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

如何在OpenCVSharp代码中使用新的C++样式API?

我正在使用OpenCVSharp,但目前我的一半代码在C中,另一半在C++ API中,我试图将它全部移植到C++版本以避免弃用的API以及避免加载图像两次(分享Mat而不是每个图像一个Mat和一个CvMat)

这是我的代码:

            CvMat distortion = new CvMat(8, 1, MatrixType.F64C1);
            distortion[0, 0] = camera.CameraConfig.k1;
            distortion[1, 0] = camera.CameraConfig.k2;
            distortion[2, 0] = camera.CameraConfig.p1;
            distortion[3, 0] = camera.CameraConfig.p2;
            distortion[4, 0] = camera.CameraConfig.k3;
            distortion[5, 0] = 0;
            distortion[6, 0] = 0;
            distortion[7, 0] = 0;

            CvMat intrinsic = new CvMat(3, 3, MatrixType.F32C1);
            intrinsic[0, 0] = camera.CameraConfig.fx;
            intrinsic[0, 1] = camera.CameraConfig.skew;
            intrinsic[0, 2] = camera.CameraConfig.cx;
            intrinsic[1, 0] = 0;
            intrinsic[1, 1] = camera.CameraConfig.fy;
            intrinsic[1, 2] = camera.CameraConfig.cy;
            intrinsic[2, …
Run Code Online (Sandbox Code Playgroud)

c# opencv opencvsharp

7
推荐指数
1
解决办法
738
查看次数

如何使用OpenCVSharp将Mat转换为位图?

首先,我试过这个,

    public static Bitmap MatToBitmap(Mat mat)
    {
        return OpenCvSharp.Extensions.BitmapConverter.ToBitmap(mat);
    }
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

那么,我试过这个,

    public static Bitmap MatToBitmap(Mat mat)
    {
        mat.ConvertTo(mat, MatType.CV_8U);
        return OpenCvSharp.Extensions.BitmapConverter.ToBitmap(mat);
    }
Run Code Online (Sandbox Code Playgroud)

图像完全是黑色的,

在此输入图像描述

    public static Bitmap ConvertMatToBitmap(Mat matToConvert) 
    {            
        return new Bitmap(matToConvert.Cols, matToConvert.Rows, 4*matToConvert.Rows, System.Drawing.Imaging.PixelFormat.Format8bppIndexed, matToConvert.Data);
    }
Run Code Online (Sandbox Code Playgroud)

这也不起作用.

在此输入图像描述

image-processing c#-4.0 opencvsharp

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

Winforms 中的简单相机捕获

我只想预览然后从 WinForms C# 应用程序中的设备摄像头(网络摄像头)捕获快照。

我用过这个:WebEye WebCameraControl,但它似乎在某些机器/相机上失败。描述暗示有更多的负载,但我在 NuGet 上找不到任何适用于 WinForms 的内容。

有什么建议吗?我觉得我错过了一些明显的东西,比如一个可以做到这一点的内置 Windows 控件!


编辑:
在尝试添加 OpenCVSharp 这就是我得到的: 在此处输入图片说明

c# camera winforms opencvsharp

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

内存泄漏问题.使用OpenCVSharp在Unity中进行眼动跟踪

我已经在这个项目上工作了几个月,我正在尝试使用OpenCVSharp将眼睛跟踪整合到Unity中.我已经设法让一切工作,包括实际跟踪瞳孔等,但我有内存泄漏.基本上在程序运行20-30秒后冻结并且控制台错误说"无法分配(这里插入数字)位".在查看程序运行期间的内存使用情况后,您可以看到它的使用情况稳步攀升,直至最大化然后崩溃.

现在我花了很长时间试图解决这个问题,并阅读了很多关于正确发布图像/存储等的帮助帖子.尽管事实上我正在这样做,但它似乎并未正确释放它们.我尝试使用垃圾收集器强制它回收内存,但这似乎也没有用.我只是对图像做了一些根本性的错误以及我如何回收它们?或者每帧都创建新图像(即使我正在释放它们)导致问题.

任何帮助将不胜感激.这是下面的代码,您可以忽略更新功能中的许多内容,因为它与实际跟踪部分和校准有关.我意识到代码非常混乱,抱歉!需要担心的主要部分是EyeDetection().

using UnityEngine;
using System.Collections;
using System;
using System.IO;
using OpenCvSharp;
using OpenCvSharp.Blob;
//using System.Xml;
//using System.Threading;
//using AForge;

//using OpenCvSharp.Extensions;
//using System.Windows.Media;
//using System.Windows.Media.Imaging;



public class CaptureScript2 : MonoBehaviour
{
    //public GameObject planeObj;
    public WebCamTexture webcamTexture;     //Texture retrieved from the webcam
    //public Texture2D texImage;              //Texture to apply to plane
    public string deviceName;

    private int devId = 1;
    private int imWidth = 800;             //camera width
    private int imHeight = 600;             //camera height
    private string errorMsg = "No errors …
Run Code Online (Sandbox Code Playgroud)

c# opencv memory-leaks unity-game-engine opencvsharp

6
推荐指数
1
解决办法
1422
查看次数

使用OpenCV解决非平面物点和图像点之间的变换

已添加问题以增加清晰度

我正在使用OpenCV来尝试校准激光扫描仪.

我有一组由扫描仪捕获的2d点.为了举例,我们让这些点表示如下:

IMAGE POINTS
{(0.08017784, -0.08993121, 0)}
{(-0.1127666, -0.08712908, 0)}
{(-0.1117229, 0.1782855, 0)}
{(0.09053531, 0.198439, 0)}
Run Code Online (Sandbox Code Playgroud)

我知道这些点对应于以下现实世界点:

OBJECT POINTS
{(0, 0, 0)}
{(190, 0, 0)}
{(190, 260, 0)}
{(0, 260, 122)}
Run Code Online (Sandbox Code Playgroud)

我一直在使用OpenCV来解决旋转和平移矩阵,它允许我给出一个世界点(例如100,200,20)并在捕获的坐标系中返回2d点.

到目前为止,我的结果表明,如果物点是共面的,那么OpenCV几乎可以完美地找到旋转/平移结果.

但是,在我上面给出的例子中,并非所有点都在同一个平面上的问题,我得到的答案非常错误.

我知道这是可能的(不一定是openCV)因为我有另一个可以做到这一点的商业软件.作为参考,上述问题的解决方案是矩阵:

SOLUTION
[-0.99668, 0.03056, 0.07543]
[ 0.05860, 0.91263, 0.40454]
[-0.05647, 0.40762,-0.91140]
[79.34385, -89.63855,-982.25938]
Run Code Online (Sandbox Code Playgroud)

我使用均方根误差来确定结果的有效性.我提供的解决方案的均方根误差是1.61560.虽然OpenCV的结果超过了1000.

问题:

使用给定的图像点和对象点如何使用OpenCV(或其他方法)来获得解决方案.

我已经尝试过的:

我从OpenCV尝试过基本的SolvePNP,如下所示:

Cv2.SolvePnP(objectPoints, imagePoints, camMatrix, dist, out double[] rvec, out double[] tvec, false, SolvePnPFlags.Iterative);
Run Code Online (Sandbox Code Playgroud)

有关SolvePNP的文档

如上所述,如果我的对象点都是平面的,则此解决方案有效.但是对于其他平面上的点,解决方案会崩溃并且非常错误.

提前致谢!

opencv computer-vision augmented-reality opencvsharp

5
推荐指数
1
解决办法
225
查看次数

OpenCVSharp 坐标和 System.Drawing 坐标之间的转换

我有点卡在这个:

我试图将两个 OpenCvSharp.Points 制作的矩形转换为 System.Drawing.Rectangle。

我在 OpenCvSharp 中发现了一个有趣的区域,我想将此区域保存为一个新的位图,以显示在 PictureBox 或其他东西中。

public static Mat Detect(string filename)
        {
            var cfg = "4000.cfg";
            var model = "4000.weights"; //YOLOv2 544x544
            var threshold = 0.3;

            var mat = Cv2.ImRead(filename);
            var w = mat.Width;
            var h = mat.Height;
            var blob = CvDnn.BlobFromImage(mat, 1 / 255.0, new OpenCvSharp.Size(416, 416), new Scalar(), true, false);
            var net = CvDnn.ReadNetFromDarknet(Path.Combine(System.AppDomain.CurrentDomain.BaseDirectory, cfg), Path.Combine(System.AppDomain.CurrentDomain.BaseDirectory, model));
            net.SetInput(blob, "data");

            Stopwatch sw = new Stopwatch();
            sw.Start();
            var prob = net.Forward(); // Process NeuralNet
            sw.Stop();
            Console.WriteLine($"Runtime:{sw.ElapsedMilliseconds} …
Run Code Online (Sandbox Code Playgroud)

c# opencv opencvsharp

5
推荐指数
1
解决办法
1244
查看次数

OpenCV:基本矩阵和SolvePnPRansac的投影矩阵完全不同

作为硕士论文的一部分,我正在探索Structure From Motion.在阅读了H&Z书的部分内容后,通过在线教程和阅读了很多SO帖子,我得到了一些有用的结果,但我也遇到了一些问题.我正在使用OpenCVSharp包装器.所有图像都使用相同的相机拍摄.

我现在拥有的:


首先,我计算初始的3d点坐标.我这样做是为了这些步骤:

  1. 计算Farneback的密集光流.
  2. 使用Cv2.FindFundamentalMat和RANSAC找到基本矩阵
  3. 使用相机内在函数获取Essential矩阵(此时我使用预定的内在函数)并对其进行分解:

    Mat essential = camera_matrix.T() * fundamentalMatrix * camera_matrix;
    
    SVD decomp = new SVD(essential, OpenCvSharp.SVDFlag.ModifyA);
    
    Mat diag = new Mat(3, 3, MatType.CV_64FC1, new double[] {
        1.0D, 0.0D, 0.0D,
        0.0D, 1.0D, 0.0D,
        0.0D, 0.0D, 0.0D
    });
    
    Mat Er = decomp.U * diag * decomp.Vt;
    
    SVD svd = new SVD(Er, OpenCvSharp.SVDFlag.ModifyA);
    
    Mat W = new Mat(3, 3, MatType.CV_64FC1, new double[] {
        0.0D, -1.0D, 0.0D,
        1.0D, 0.0D, 0.0D,
        0.0D, 0.0D, 1.0D
    }); …
    Run Code Online (Sandbox Code Playgroud)

c# 3d opencv matrix opencvsharp

4
推荐指数
1
解决办法
1523
查看次数

Multiple results in OpenCVSharp3 MatchTemplate

I am trying to find image occurences inside an image. I have written the following code to get a single match using OpenCVSharp3:

Mat src = OpenCvSharp.Extensions.BitmapConverter.ToMat(Resources.all);
Mat template = OpenCvSharp.Extensions.BitmapConverter.ToMat(Resources.img);
Mat result = src.MatchTemplate(template, TemplateMatchModes.CCoeffNormed);

double minVal, maxVal;
OpenCvSharp.Point minLoc, maxLoc;
result.MinMaxLoc(out minVal, out maxVal, out minLoc, out maxLoc);
Console.WriteLine("maxLoc: {0}, maxVal: {1}", maxLoc, maxVal);
Run Code Online (Sandbox Code Playgroud)

How can I get more matches based on a threshold value?

Thank you!

c# opencv opencvsharp

3
推荐指数
1
解决办法
6076
查看次数

Float*是什么意思?

我试图理解代码是如何运作的,因为这一部分无法理解一个非常重要的部分.你能解释一下当我们使用*x而不是x时,浮动*意味着什么以及它有何不同?

为什么f1 anf f2的值在每次迭代后都会发生变化?是因为IplImages [0]和IplImages [1] .toPointer?请解释.

List<IplImage> IplImages;

float* f1 = (float*)IplImages[0].ImageData.ToPointer();
float* f2 = (float*)IplImages[1].ImageData.ToPointer();
.
.
.
.
if (*(f2 + row * imageWidth) > m)
 {
   m = *(f2 + row * imageWidth);
   .....
 }
Run Code Online (Sandbox Code Playgroud)

c# c#-4.0 opencvsharp

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