Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在opencv(c#)中从摄影机提取文本_C#_Opencv_Image Processing_Video Processing_Opencvsharp - Fatal编程技术网

在opencv(c#)中从摄影机提取文本

在opencv(c#)中从摄影机提取文本,c#,opencv,image-processing,video-processing,opencvsharp,C#,Opencv,Image Processing,Video Processing,Opencvsharp,我写了一些代码,用于从照相机中查找文本。实际上,我第一次编写了在图像中查找文本的代码,我成功了,但我无法从相机中找到文本。 先谢谢你。 此外,我在类库中编写了这段代码,因此无法很好地测试它 public string GetImageText(string imgPath) { pathImage = imgPath; //CvCapture cap = new CvCapture(0); CvCapture cap; /

我写了一些代码,用于从照相机中查找文本。实际上,我第一次编写了在图像中查找文本的代码,我成功了,但我无法从相机中找到文本。 先谢谢你。 此外,我在类库中编写了这段代码,因此无法很好地测试它

public string GetImageText(string imgPath)
    {


        pathImage = imgPath;

        //CvCapture cap = new CvCapture(0);
       CvCapture cap;
       //CvCapture cap = new CvCapture(imgPath);
       cap = CvCapture.FromFile(imgPath);

       cap= CvCapture.FromCamera(CaptureDevice.Any);

      //  img = new IplImage(imgPath, LoadMode.Color);
      // cap =CvCapture.FromFile(imgPath);

      // IplImage frame = new IplImage();
       // imgPath=cap.QueryFrame(frame);
        frame = cap.QueryFrame();
       // IplImage frame = new IplImage();
       // BitmapConverter.ToBitmap(frame);
      //frame = new IplImage(imgPath, LoadMode.Color);


        if (frame != null)
        {
            IplImage img1 = new IplImage(frame.Size, BitDepth.U8, 1);
            IplConvKernel element = Cv.CreateStructuringElementEx(21, 3, 10, 2, ElementShape.Rect, null);
            aimg = new IplImage(frame.Size, BitDepth.U8, 1);
            IplImage temp = aimg.Clone();
            IplImage dest = aimg.Clone();
            frame.CvtColor(aimg, ColorConversion.RgbaToGray);
            bimg = aimg.Clone();
            Cv.Smooth(aimg, aimg, SmoothType.Gaussian);
            Cv.MorphologyEx(aimg, temp, dest, element, MorphologyOperation.TopHat, 1);

            Cv.Threshold(dest, aimg, 128, 255, ThresholdType.Binary | ThresholdType.Otsu);
            Cv.Smooth(aimg, dest, SmoothType.Median);
            Cv.Dilate(dest, dest, element, 2);

            Cv.ReleaseImage(temp);
            Cv.ReleaseImage(dest);
            IplImage labelImage = new IplImage(frame.Size, CvBlobLib.DepthLabel, 1);
            labelImage = new IplImage(frame.Size, BitDepth.U8, 1);
            frame = new IplImage(frame.Size, BitDepth.U8, 1);

            blob = new CvBlobs();
            text.Clear();
            CvBlobLib.Label(labelImage, blob);

            CvBlobLib.FilterByArea(blob, 6, 10);
            IplImage imgtemp = frame.Clone();
            foreach (var item in blob)
            {

                item.Value.SetImageRoiToBlob(bimg);

                double ratio = (double)item.Value.Rect.Width / item.Value.Rect.Height;
                double angle = (double)item.Value.Angle();
                if (ratio > 3.5 && ratio < 5.4 && angle > -15 && angle < 15)

                {

                    IplImage texttemp = new IplImage(new CvSize(140, 27), bimg.Depth, bimg.NChannels);

                 // texttemp.Flip( null , FlipMode.X );


                    Cv.Resize(bimg, texttemp);

                    text.Add(texttemp);
                    frame.Rectangle(item.Value.Rect, new CvScalar(0, 0, 255), 2, LineType.Link4);
                 //   frame.Flip(null, FlipMode.X);
              //   frame.Rectangle(item.Value.Rect, new CvScalar(0, 0, 255), 2, LineType.Link4)=RotateFlipType.Rotate180FlipNone()
                   // RotateFlipType.Rotate180FlipX(frame.Rectangle(item.Value.Rect, new CvScalar(0, 0, 255), 2, LineType.Link4));
                  // flipImage=frame.Rectangle(item.Value.Rect, new CvScalar(0, 0, 255), 2, LineType.Link4);
                }
            }

            textList.Clear();

        }
        return pathImage;
    }
公共字符串GetImageText(字符串imgPath)
{
路径图像=imgPath;
//CvCapture cap=新CvCapture(0);
捕获帽;
//CvCapture cap=新的CvCapture(imgPath);
cap=CvCapture.FromFile(imgPath);
cap=CvCapture.FromCamera(CaptureDevice.Any);
//img=新的IplImage(imgPath,LoadMode.Color);
//cap=CvCapture.FromFile(imgPath);
//IplImage框架=新IplImage();
//imgPath=cap.QueryFrame(frame);
frame=cap.QueryFrame();
//IplImage框架=新IplImage();
//BitmapConverter.ToBitmap(帧);
//frame=新的IplImage(imgPath,LoadMode.Color);
如果(帧!=null)
{
IplImage img1=新的IplImage(frame.Size,BitDepth.U8,1);
IplConvKernel元素=Cv.CreateStructuringElementEx(21,3,10,2,ElementShape.Rect,null);
aimg=新IplImage(frame.Size,BitDepth.U8,1);
IplImage temp=aimg.Clone();
IplImage dest=aimg.Clone();
frame.CvtColor(aimg,ColorConversion.RgbaToGray);
bimg=aimg.Clone();
Cv.Smooth(aimg,aimg,SmoothType.Gaussian);
Cv.MorphologyEx(目标、温度、目的地、元素、形态操作1);
Cv.阈值(dest,aimg,128,255,ThresholdType.Binary | ThresholdType.Otsu);
等速平滑(aimg、dest、SmoothType、中值);
Cv.扩张(目的地,目的地,元素,2);
Cv.ReleaseImage(温度);
Cv.ReleaseImage(目的地);
IplImage labelImage=新IplImage(frame.Size,CvBlobLib.DepthLabel,1);
labelImage=新IplImage(frame.Size,BitDepth.U8,1);
frame=新的IplImage(frame.Size,BitDepth.U8,1);
blob=新的CVBLOB();
text.Clear();
CvBlobLib.标签(标签图像,blob);
CvBlobLib.FilterByArea(blob,6,10);
IplImage imgtemp=frame.Clone();
foreach(blob中的var项目)
{
项目值设置图像ROITOBLOB(bimg);
双重比率=(双重)item.Value.Rect.Width/item.Value.Rect.Height;
双角度=(双)item.Value.angle();
如果(比率>3.5&&比率<5.4&&角度>-15&&角度<15)
{
IplImage texttemp=新IplImage(新CvSize(140,27),双通道深度,双通道);
//texttemp.Flip(空,FlipMode.X);
Cv.调整大小(bimg、texttemp);
text.Add(texttemp);
frame.Rectangle(item.Value.Rect,新的CvScalar(0,0,255),2,线型.Link4);
//frame.Flip(空,FlipMode.X);
//frame.Rectangle(item.Value.Rect,新的CvScalar(0,0,255),2,LineType.Link4)=RotateFlipType.Rotate180FlipNone()
//RotateFlipType.Rotate180FlipX(frame.Rectangle(item.Value.Rect,新的CvScalar(0,0,255),2,LineType.Link4));
//flipImage=frame.Rectangle(item.Value.Rect,新的CvScalar(0,0,255),2,线型.Link4);
}
}
textList.Clear();
}
返回路径图像;
}

我没有评论所需的声誉,因此必须以回答的形式进行评论。在您完成所有查找文本的处理后,pathImage似乎没有得到任何值-它保留imgPath的值,因此您只需返回输入的相同值。

感谢您的注释Pathımage获得值,但我放弃在此处添加这些代码。此外,当我放入调试时,我的代码将进行所有处理:(如果你想在这里添加这些代码,可以在这里添加更多代码之前查看以下链接:非常感谢,但我读了它,我们的问题和代码不同,但ı会再读一遍。我对此不太了解,无法提供帮助,但如果你无法调试,你应该添加一些日志来帮助你。例如:
IplImage imgTemp=frame、 Clone();Console.Writeline(“frame的值是”+frame.someProperty);Console.Writeline(“temp的值是”+imgTemp.someProperty);
谢谢,但我可以调试,代码正在进入所有处理过程,所以我不知道我的错误在哪里