标签: emgucv

如何获取和设置EmguCV Mat图像的像素值?

我正在使用EmguCV 3.0.0包装器来访问OpenCV 3.0库.我Mat在几个地方使用这门课.以下是单个通道的示例,8x8图像由double值组成:

Mat image = new Mat(8, 8, DepthType.Cv64F, 1);
Run Code Online (Sandbox Code Playgroud)

Image<>类提供用于获取和设置的像素值合理的手段,并且该方法是对相同的Matrix<>类,但是它似乎没有那么明显的Mat类.我弄清楚如何设置单个像素的唯一方法是使用掩码:

// set two pixel values, (0,0) to 9.0, (2, 3) to 42.0

Matrix<byte> mask = new Matrix<byte>(8,8);
mask.Data[0, 0] = 1;
image.SetTo(new MCvScalar(9.0), mask);

mask = new Matrix<byte>(8,8);
mask.Data[2, 3] = 1;
image.SetTo(new MCvScalar(42.0), mask);
Run Code Online (Sandbox Code Playgroud)

感觉它应该是两行,而不是六行,所以我觉得我错过了一些东西.当Mat多个通道时,事情变得更加复杂,因为Matrix<>只有2D,因此必须使用掩模来设置每个通道上的像素.

我无法承受以这种方式设置像素的时间或内存. 如何通过单个方法调用设置像素?

c# image-processing emgucv mat

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

如何减少 YOLOv3 文件中的类数?

我正在使用 YOLOv3 来检测视频中的汽车。我下载我的代码中使用了三个文件coco.namesyolov3.cfg并且yolov3.weights被培养为80个不同类别的对象被检测到。代码工作但非常慢,每帧需要超过 5 秒。我相信如果我减少类的数量,它会运行得更快。我可以从 中删除不必要的类coco.names,但不幸的是,我无法理解 中的所有内容yolov3.cfg,甚至无法阅读yolov3.weights. 本来想训练自己的模型,但是遇到了很多问题,所以放弃了这个想法。谁能帮我修改这些文件?

opencv object-detection emgucv yolo

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

可以从int []数组中获取IntPtr吗?

问候.

在C#中:如果我有一个像这样声明的int []数组

int[] array = new array[size];
Run Code Online (Sandbox Code Playgroud)

有一种方法可以从这个数组中获取IntPtr吗?

问题是我正在使用EmguCV框架,并且有一个构造函数来创建一个将IntPtr带到像素数据的图像,以便从数组(int [])构建图像.

Image<Gray,Int32> result = new Image<Gray,int>(bitmap.Width,bitmap.Height,stride,"**array.toPointer??**");
Run Code Online (Sandbox Code Playgroud)

顺便说一句,如果有人能告诉我如何计算步幅,这将是伟大的.

c# int intptr emgucv stride

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

从单应性中提取变换和旋转矩阵?

我有一个来自相机的2个连续图像,我想估计相机姿势的变化: 两张相机移动的照片

我计算光流量:

Const MAXFEATURES As Integer = 100
imgA = New Image(Of [Structure].Bgr, Byte)("pic1.bmp")
imgB = New Image(Of [Structure].Bgr, Byte)("pic2.bmp")
grayA = imgA.Convert(Of Gray, Byte)()
grayB = imgB.Convert(Of Gray, Byte)()
imagesize = cvGetSize(grayA)
pyrBufferA = New Emgu.CV.Image(Of Emgu.CV.Structure.Gray, Byte) _
    (imagesize.Width + 8, imagesize.Height / 3)
pyrBufferB = New Emgu.CV.Image(Of Emgu.CV.Structure.Gray, Byte) _
    (imagesize.Width + 8, imagesize.Height / 3)
features = MAXFEATURES
featuresA = grayA.GoodFeaturesToTrack(features, 0.01, 25, 3)
grayA.FindCornerSubPix(featuresA, New System.Drawing.Size(10, 10),
                       New System.Drawing.Size(-1, -1),
                       New Emgu.CV.Structure.MCvTermCriteria(20, 0.03))
features = …
Run Code Online (Sandbox Code Playgroud)

vb.net opencv matrix homography emgucv

8
推荐指数
2
解决办法
8229
查看次数

Emgu CV从视频文件中获取所有帧

我想请你帮我用Emgu CV从视频文件中获取所有帧.我知道我可以使用Capture类及其QueryFrame()方法,但这只返回一帧.获得所有帧的最简单方法是什么?(并将其保存为例如Image<Bgr, Byte>[])我需要所有帧进行更多处理(更具体地说:视频摘要的关键帧提取).

非常感谢你的帮助.

c# video emgucv

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

通过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万
查看次数

Emgu CV没有检测到CUDA

我有GeForce GTX 960,安装了353.90 NVidia驱动程序和7.5.18 CUDA驱动程序.我正在使用最新版本的Emgu CV,但它不会检测系统上的CUDA(即使在Emgu样本中),Emgu.CV.Cuda.CudaInvoke.HasCuda也是如此false.与此同时,其他程序,如Xillisoft Video Converter可以毫无问题地使用CUDA.如何为Emgu CV启用CUDA?

c# opencv nvidia emgucv

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

Emgu.CV 4.2.0 图像转换方法不可用

我有一个 .Net Standard 2.0 项目,其中最新版本的 Emgu.CV - 4.2.0.3636 通过 Nuget 包安装。我还有 System.Drawing.Common 包,它支持位图。我需要将 Mat 转换为 Bitmap 并从现有位图创建 Mats 的可能性。之前 Mats 有 Bitmap 属性,还有 Image 的构造函数,比如接受 Bitmap 作为参数。从我在 Emgu.CV 4.2.0 版本的发行说明中看到的 - 这些已被替换为位图的 ToMat() 扩展方法和 Mats/Images 的 AsBitmap() 方法。但是对我来说,这两种方法都不可用。

官网上的发行说明说:

它已被添加到 Emgu.CV.UI nuget 包(或 dll 文件)中

同时我在 nuget 中没有看到 Emgu.CV.UI 包,只有我已经安装的 Emgu.CV 包。

我还缺少什么?

c# emgucv

8
推荐指数
2
解决办法
3979
查看次数

C#,Emgu网络摄像头 - 选择捕捉尺寸

我正在使用Emgu库来集成C#中的开放式CV网络摄像头功能.

我使用此代码选择捕获设备并设置其大小:

camera = new Capture(0);
camera.SetCaptureProperty(CAP_PROP.CV_CAP_PROP_FRAME_WIDTH, videoSettings.width);
camera.SetCaptureProperty(CAP_PROP.CV_CAP_PROP_FRAME_HEIGHT, videoSettings.height);
Run Code Online (Sandbox Code Playgroud)

然后我在像这样的imageBox中显示它: imageBox1.Image = camera.QueryFrame();

然后要捕获当前帧的快照我使用此代码:

Image<Bgr, byte> snapshot = camera.QueryFrame();
snapshot.Save("snapshot.jpg");
Run Code Online (Sandbox Code Playgroud)

虽然我希望能够以比预览窗口更高的分辨率保存快照.

但问题是,据我所知,我无法使用相同的webcamera创建一个新的"Capture"对象.所以我想知道是否有可能设置camera.setCaptureProperty高度和宽度让我们说1028x720然后以某种方式裁剪它以在imageBox中显示它,分辨率为514x360?

或者还有其他方法吗?

c# video-capture emgucv

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

使用OpenCV获取二进制图像中白色像素数的最快方法

使用OpenCV获取二进制图片中白色像素数的最快方法是什么?有没有比使用两个for循环并逐像素地访问图像更快的东西?

c# opencv emgucv

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