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);

More info about Mat in EmguCV here