user15294548
user15294548

Reputation:

EmguCV never open ".jpg" file but open only ".tif" files..Why?

I am using EmguCV in Visual Studio 2022 and I am simple trying to read and open my image but it only opens .tif image files not .jpg or any other file... When I try to open any .jpg file it gives me an exception openCV:index out of bound

Here:

enter image description here

I also debugged it and find something like it is not reading file when I passed it to EmguCV image structure "Image<Bgr,byte> imgFile=new Image<Bgr,byte>(filename)" while it is loading file from dialogue but not passing forward from this structure. Here's the Debug SS:

enter image description here

Code:

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

Another Imp: My friend is also doing the same work with me and he is using the same ide same mehtods same references same dll files but his is running fine but not of mine..

Upvotes: 0

Views: 317

Answers (1)

erik7854
erik7854

Reputation: 170

I just tried your code snippet in a new Form and I can say that I can successfully load a .jpg image and display it in a PictureBox. Make sure your image is not corrupted in the first place.

Here's my code:

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

Note that it's imgFile.ToBitmap(), not imgFile.Bitmap()

Also I would suggest you to switch to Mat instead of Image<>. More info from OpenCV docs

With Mat the code to get the image is as easy as:

Mat imgFile = new Mat(ofd.FileName);

More info about Mat in EmguCV here

Upvotes: 0

Related Questions