EmguCV 从不打开“.jpg”文件,而只打开“.tif”文件。为什么?
EmguCV never open ".jpg" file but open only ".tif" files..Why?
我在 Visual Studio 2022 中使用 EmguCV,我很简单地尝试读取和打开我的图像,但它只能打开 .tif 图像文件不是 .jpg 或任何其他文件...
当我尝试打开任何 .jpg 文件时,它给了我一个异常 openCV:index out of bound
这里:
我也调试了它,发现当我将它传递给 EmguCV 图像结构时它没有读取文件 "Image imgFile=new Image(filename) ”
当它从对话中加载文件但不从该结构向前传递时。
这是调试 SS:
代码:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Emgu;
using Emgu.CV;
using Emgu.CV.Structure;
using Emgu.CV.Util;
namespace test_EmguCV
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void openToolStripMenuItem_Click(object sender, EventArgs e)
{
try
{
OpenFileDialog ofd = new OpenFileDialog();
if (ofd.ShowDialog() == DialogResult.OK)
{
Image<Bgr, byte> imgFile = new Image<Bgr, byte>(ofd.FileName);
pictureBox1.Image = imgFile.Bitmap;
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
private void exToolStripMenuItem_Click(object sender, EventArgs e)
{
this.Close();
}
}
}
另一个小鬼:
我的朋友也和我做同样的工作,他使用相同的 ide 相同的方法,相同的引用相同的 dll 文件,但他的 运行 很好,但不是我的..
我刚刚在新表单中尝试了您的代码片段,我可以说我可以成功加载 .jpg 图像并将其显示在 PictureBox 中。首先确保您的图像没有损坏。
这是我的代码:
private void button1_Click(object sender, EventArgs e)
{
try
{
OpenFileDialog ofd = new OpenFileDialog();
if (ofd.ShowDialog() == DialogResult.OK)
{
Image<Bgr, byte> imgFile = new Image<Bgr, byte>(ofd.FileName);
pictureBox1.Image = imgFile.ToBitmap();
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
注意是imgFile.ToBitmap()
,不是imgFile.Bitmap()
此外,我建议您改用 Mat
而不是 Image<>
。 More info from OpenCV docs
使用 Mat
获取图像的代码非常简单:
Mat imgFile = new Mat(ofd.FileName);
我在 Visual Studio 2022 中使用 EmguCV,我很简单地尝试读取和打开我的图像,但它只能打开 .tif 图像文件不是 .jpg 或任何其他文件... 当我尝试打开任何 .jpg 文件时,它给了我一个异常 openCV:index out of bound
这里:
我也调试了它,发现当我将它传递给 EmguCV 图像结构时它没有读取文件 "Image
代码:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Emgu;
using Emgu.CV;
using Emgu.CV.Structure;
using Emgu.CV.Util;
namespace test_EmguCV
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void openToolStripMenuItem_Click(object sender, EventArgs e)
{
try
{
OpenFileDialog ofd = new OpenFileDialog();
if (ofd.ShowDialog() == DialogResult.OK)
{
Image<Bgr, byte> imgFile = new Image<Bgr, byte>(ofd.FileName);
pictureBox1.Image = imgFile.Bitmap;
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
private void exToolStripMenuItem_Click(object sender, EventArgs e)
{
this.Close();
}
}
}
另一个小鬼: 我的朋友也和我做同样的工作,他使用相同的 ide 相同的方法,相同的引用相同的 dll 文件,但他的 运行 很好,但不是我的..
我刚刚在新表单中尝试了您的代码片段,我可以说我可以成功加载 .jpg 图像并将其显示在 PictureBox 中。首先确保您的图像没有损坏。
这是我的代码:
private void button1_Click(object sender, EventArgs e)
{
try
{
OpenFileDialog ofd = new OpenFileDialog();
if (ofd.ShowDialog() == DialogResult.OK)
{
Image<Bgr, byte> imgFile = new Image<Bgr, byte>(ofd.FileName);
pictureBox1.Image = imgFile.ToBitmap();
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
注意是imgFile.ToBitmap()
,不是imgFile.Bitmap()
此外,我建议您改用 Mat
而不是 Image<>
。 More info from OpenCV docs
使用 Mat
获取图像的代码非常简单:
Mat imgFile = new Mat(ofd.FileName);