无法在 C# 中转换类型的对象

Unable to cast object of type in C#

我正在尝试将我的图像从我的 MS Access 数据库读取到我的特征对象识别器中。但是现在,我收到一个错误

Unable to cast object of type 'System.Byte[]' to type 'Emgu.CV.Image`2[Emgu.CV.Structure.Gray,System.Byte]'.

我不知道这个错误是关于什么的。下面是我的代码。

int count = reader.FieldCount;

while (reader.Read())
{
    labels.Add(reader["FaceName"].ToString());
    trainingImages.Add((Image<Gray,byte>)reader["FaceImage"]);
}   
if (TSTable.Rows.Count != 0)
{
    ////    //TermCriteria for face recognition with numbers of trained images like maxIteration
    MCvTermCriteria termCrit = new MCvTermCriteria(ContTrain, 0.001);

    ////Eigen face recognizer
    EigenObjectRecognizer recognizer = new EigenObjectRecognizer(
        trainingImages.ToArray(), //database faceimage list
        labels.ToArray(), //facename list
        3000,
        ref termCrit);

有人可以帮我解决这个问题吗?我已经尝试了一个多星期,但仍然无法找到任何解决方案。谢谢。

问题出在这一行。

(Image<Gray,byte>)reader["FaceImage"]

问题是 reader["FaceImage"] 的类型是 byte[]Image<Gray,byte>

  1. 不是 byte[]
  2. 的基础 class
  3. 没有来自 byte[] 的显式或隐式转换运算符。

你要的是

{
    labels.Add(reader["FaceName"].ToString());
    byte[] buffer = (byte[]) reader["FaceImage"];
    Image<Gray,byte> image = new Image<Gray,byte>(buffer);
    trainingImages.Add(image);
} 

如果 reader["FaceImage"] 是图像文件,那么您需要从文件创建一个新图像:

Image<Bgr, Byte> img1 = new Image<Bgr, Byte>(reader["FaceImage"]);
trainingImages.Add(image);