我试图从图片框中读取图像以使用EMGU执行功能匹配。下面是我从示例项目中获得的代码。
Bitmap img = new Bitmap(pictureBox1.Image);
Image<Bgr, byte> imgInput = new Image<Bgr, byte>(img);
using (Mat modelImage = CvInvoke.Imread("C:\\model.jpg", ImreadModes.Color)) //works
using (Mat observedImage = CvInvoke.Imread(imgInput, ImreadModes.Color)) //doesn't work
{
Mat result = DrawMatches.Draw(modelImage, observedImage, out matchTime);
ImageViewer.Show(result, String.Format("Matched in {0} milliseconds", matchTime));
}
当我给出CvInvoke.ImRead的路径时,它可以工作,但是如果我创建一个位图并使用该位图作为图像,则会出现错误,指出CvInvoke.ImRead有一些无效的参数。
如何从图片框中读取图像?
答案 0 :(得分:0)
CvInvoke.Imread方法只能用于从文件中读取。第一个参数必须是文件名作为字符串。所以您可以按如下方式修改代码:
Bitmap img = new Bitmap(pictureBox1.Image);
Image<Bgr, byte> imgInput = new Image<Bgr, byte>(img);
using (Mat modelImage = CvInvoke.Imread("C:\\model.jpg", ImreadModes.Color)) //works
using (Mat observedImage = new Image<Bgr, byte>(img).Mat) //works too
{
Mat result = DrawMatches.Draw(modelImage, observedImage, out matchTime);
ImageViewer.Show(result, String.Format("Matched in {0} milliseconds", matchTime));
}