Tag: opencv

OpenCV / EmguCV大图像拼接

我是图像拼接技术和算法的新手。 我需要的是缝合几张图像(从2到20)。 图像大小约为4-5 MB,分辨率为4000×3000。 由于我有.NET背景,我尝试了与安装包一起使用的EmguCV拼接示例应用程序。 但是我一直得到OutOfMemoryexception或者没有分配xxxxx字节。 之后我尝试编写使用OpenCV的原生C ++控制台应用程序并获得相同的结果。 问题是拼接实现内部还是我需要为Stitcher类设置一些特殊设置? 尝试了不同版本的Emgu – 2.9,2.4.2和2.4,OpenCV – 2.4.7 将图像大小调整为800×600无济于事。 当它很小时,库返回0作为结果。 我在两台不同的Windows 8 x64机器上测试了它,内存为8 GB,Windows 7 x64为16 GB。 在这两种情况下,应用程序都会尝试使用所有可用内存,然后崩溃。 有谁知道这个库可以处理的最大图像大小是多少? 我应该使用什么设置来减少内存使用量? 有没有人能够缝合大图像? 将不胜感激任何帮助或建议。 谢谢! EmguCV C#代码(它实际上是来自EmguCV Image Stitching示例应用程序的代码) private void selectImagesButton_Click(object sender, EventArgs e) { OpenFileDialog dlg = new OpenFileDialog(); dlg.CheckFileExists = true; dlg.Multiselect = true; if (dlg.ShowDialog() == System.Windows.Forms.DialogResult.OK) […]

使用emgu.cv的Alpha合成图像

Emgu.CV(Nuget包2.4.2)并没有我能告诉实现OpenCV中可用的gpu :: alphaComp方法。 因此,当尝试实现这种特定类型的复合时,C#中的速度令人难以置信,这样它占用了我应用程序总CPU容量的80%。 这是我原来的解决方案,表现非常糟糕。 static public Image Overlay( Image image1, Image image2 ) { Image result = image1.Copy(); Image src = image2; Image dst = image1; int rows = result.Rows; int cols = result.Cols; for (int y = 0; y < rows; ++y) { for (int x = 0; x < cols; ++x) { […]

像素坐标到3D线(opencv)

我在屏幕上显示的图像通过cvInitUndistortMap和cvRemap(已完成相机校准)未失真,用户点击图像中的一个特征。 所以我有特征的(u,v)像素坐标,我也有内在矩阵和失真矩阵。 我正在寻找的是相机/真实世界坐标中的3D线的等式,用户点击的特征必须在该等式上。 我已经在相机的图像平面和特征之间有垂直距离,所以我可以将它与上述方程式结合起来,给出空间特征的(X,Y,Z)坐标。 听起来很简单(反向内在矩阵或什么?)但我无法在任何地方找到逐步说明。 C ++或C#代码首选。

在emgu cv中找到otsu阈值的function是什么?

我不需要阈值图像。 我想要门槛。 我在OpenCV中发现了这个。 cv::threshold( orig_img, thres_img, 0, 255, CV_THRESH_BINARY+CV_THRESH_OTSU ); 在EmguCv中是否存在等价物。 提前致谢。 PS。 我需要将此阈值用于canny边缘检测器

如何使用EmguCV(C#中的OpenCV)?

我不明白我要安装什么来使EmguCV工作。我打开了EmguCV提供的sample-src,但我在Visual Studio 2008中遇到错误。 我还尝试过OpenCV的其他.NET包装器,但它们都没有工作(包括示例)。 消息“(示例程序)已经解决了一个问题,需要关闭。请在运行任何使用OpenCV的程序后显示此错误到microsoft bla bla bla”。 如何在C#中完成这项工作?

检测人们穿越OpenCV线

我想计算从两边越过一条线的人数。 我有一个放在天花板上的摄像机,用于拍摄线路所在的地板(因此摄像机只能看到人头顶部;所以它更像物体探测而不是人物探测)。 是否有针对此问题或类似问题的示例解决方案? 所以我可以向他们学习? 编辑1:任何时候都有不止一个人越线。

将opencv图像cv :: Mat格式转换为C#BitmapImage

我写了这个示例代码来解释我的问题。 我在VS 2013中有一个解决方案,包含一个C#项目和一个C ++项目。 我尝试用C ++(x86)中的OpenCV读取图像。 并希望将C#x86项目(使用CLR模式)传递给Bitmap Object和BitmapImage对象以用作WPF ImageSource。 我的C ++代码: Bitmap^ SomeClass::Test(System::String^ imgFileName) { auto fileName = msclr::interop::marshal_as(imgFileName); Mat img = imread(fileName); //Do something auto bmp = gcnew Bitmap(img.cols, img.rows, img.step, Imaging::PixelFormat::Format24bppRgb, (IntPtr)img.data); bmp->Save(“InC++Side.png”); return bmp; } 我的C#代码: private void ImageTester(object sender, RoutedEventArgs e) { var image = testClass.Test(“test.png”); image.Save(“InC#Side.png”); bg.Source = ConvertToBitmapImageFromBitmap(image); } […]

OpenCv:查找多个匹配项

我有以下内容,但我无法弄清楚如何在源图像中找到所有匹配项。 static void Main() { using (var template = Cv.LoadImage(@”images\logo.png”, LoadMode.GrayScale)) using (var source = Cv.LoadImage(@”images\manyLogos.png”, LoadMode.GrayScale)) using (var sourceColour = Cv.LoadImage(@”images\manyLogos.png”, LoadMode.Color)) { var width = source.Width – template.Width + 1; var height = source.Height – template.Height + 1; using (var result = Cv.CreateImage(Cv.Size(width, height), BitDepth.F32, 1)) { Cv.MatchTemplate(source, template, result, MatchTemplateMethod.SqDiff); var THRESHOLD […]

.Net OpenCV包装是否值得使用?

所以我们在大学有这个图像处理课程,我们将广泛使用OpenCV。 问题是,OpenCV使用C ++,但我比C ++更流利C#。 我知道有OpenCV包装器( OpenCVDotNet , SharperCV , EmguCV ……)但我不知道选择哪个。 我的问题是: 哪一个包含大部分/全部OpenCVfunction? 它们甚至值得使用吗? (可能不经常更新,缺乏function或速度,……) 或者我应该更好地刷我的C ++技能? 注意:我知道我的问题可能是这个问题的重复,但它已经过时了(从2008年开始),事情可能已经改变了。

如何使用emgu cv在图像中找到任何旋转角度的黑色方块

我需要在测试表中找到三个黑色方块的坐标。 我从网站emgu.com上获取了示例代码并略微改变了它,但他找不到我需要的东西。 图像的大小为A4,测试forms的大小为A5。 我希望对你有所帮助:)我差点忘了,正方形的大小为30像素。 private void DetectRectangles(Image img) { var size = new Size(3, 3); CvInvoke.GaussianBlur(img, img, size, 0); CvInvoke.AdaptiveThreshold(img, img, 255, AdaptiveThresholdType.MeanC, ThresholdType.Binary, 75, 100); UMat cannyEdges = new UMat(); CvInvoke.Canny(img, cannyEdges, 180, 120); var boxList = new List(); using (VectorOfVectorOfPoint contours = new VectorOfVectorOfPoint()) { CvInvoke.FindContours(cannyEdges, contours, null, RetrType.Tree, ChainApproxMethod.ChainApproxSimple); int count = […]