我正在使用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,因此必须使用掩模来设置每个通道上的像素.
我无法承受以这种方式设置像素的时间或内存. 如何通过单个方法调用设置像素?
我正在使用 YOLOv3 来检测视频中的汽车。我下载我的代码中使用了三个文件coco.names
,yolov3.cfg
并且yolov3.weights
被培养为80个不同类别的对象被检测到。代码工作但非常慢,每帧需要超过 5 秒。我相信如果我减少类的数量,它会运行得更快。我可以从 中删除不必要的类coco.names
,但不幸的是,我无法理解 中的所有内容yolov3.cfg
,甚至无法阅读yolov3.weights
. 本来想训练自己的模型,但是遇到了很多问题,所以放弃了这个想法。谁能帮我修改这些文件?
问候.
在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)
顺便说一句,如果有人能告诉我如何计算步幅,这将是伟大的.
我有一个来自相机的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) 我想请你帮我用Emgu CV从视频文件中获取所有帧.我知道我可以使用Capture
类及其QueryFrame()
方法,但这只返回一帧.获得所有帧的最简单方法是什么?(并将其保存为例如Image<Bgr, Byte>[]
)我需要所有帧进行更多处理(更具体地说:视频摘要的关键帧提取).
非常感谢你的帮助.
我校准了相机并找到了内在参数(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上实现它.谁知道哪个翻译公式是正确的?
我有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?
我有一个 .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 包。
我还缺少什么?
我正在使用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?
或者还有其他方法吗?
使用OpenCV获取二进制图片中白色像素数的最快方法是什么?有没有比使用两个for循环并逐像素地访问图像更快的东西?