【问题标题】:c# Get color from webcam. Wrong color all the time?c# 从网络摄像头获取颜色。总是颜色不对?
【发布时间】:2015-12-20 20:38:38
【问题描述】:

我正在使用 cor_xy 从 originalmaster(webcam) 和 color_xy_processada 获取颜色以在图片框上显示颜色。

我正在使用图像中的 x,y(e.X 和 e.Y),但它给了我错误的颜色。

可能是因为图像在 Y 轴上反转了 180 度并被拉伸了?我不知道,也许是代码。

          cor_xy = new Bitmap(originalmaster.Image);//cria imagem para mostrar a cor na posicao x,y
            int posX = e.X; //coordenadas x
            int posY = e.Y; //coordenadas y
                            //mostra nas labels
            lblratox.Text = posX.ToString();
            lblratoy.Text = posY.ToString();
            Color Get_Color = cor_xy.GetPixel(posX, posY);//verifica a cor em x,y
            int a = Get_Color.A;
            int r = Get_Color.R;
            int g = Get_Color.G;
            int b = Get_Color.B;
            Color _color = Color.FromArgb(a, r, g, b);

            //Mostra nas labels
            lblr.Text = r.ToString();
            lblg.Text = g.ToString();
            lblb.Text = b.ToString();
            lbla.Text = a.ToString();
            cor_xy_processada = new Bitmap(selecao_cor.Image);
            for (int i = 0; i < cor_xy_processada.Width; i++) //percorre a imagem 

            {
                for (int j = 0; j < cor_xy_processada.Height; j++)
                {
                    cor_xy_processada.SetPixel(i, j, _color);

                }
            }

            selecao_cor.Image = cor_xy_processada;

图像被翻转和拉伸。它是 640x360 的图像,图片框是 320x180:

originalmaster.Image.RotateFlip(RotateFlipType.Rotate180FlipY) originalmaster.SizeMode = PictureBoxSizeMode.StretchImage;

我不知道网络摄像头的图像分辨率。也许有更好的方法来显示图像并保持 1:1 的缩小比例?

编辑:如果我使用自动大小,它可以工作

originalmaster.SizeMode = PictureBoxSizeMode.AutoSize.

或者如果 currentFrame = grabber.QueryFrame().Resize(320, 240,Emgu.CV.CvEnum.INTER.CV_INTER_CUBIC);

但现在图像非常模糊......

但问题仍然存在。我不能使用 AutoSize,因为它几乎涵盖了所有应用程序大小。 任何想法如何将网络摄像头图像缩小到图片框的位图?

【问题讨论】:

  • 我在您的这部分代码中没有看到错误。你能提供更多信息吗?图像是否缩放?它是如何缩放的?你得到什么颜色,你期望什么?你在像素 (0, 0) (0, width) (0, height) 和 (width, height) 上得到什么颜色?绿色环是什么,白色箭头应该显示什么?
  • 箭头显示我点击的位置。而戒指就忘了它,没什么
  • 也可能存在转换问题,但如果不知道您所获得的数据与您对相应像素的预期数据,就无法判断。
  • 请看我的编辑。

标签: c# colors


【解决方案1】:

假设e 是你的鼠标事件参数,试试:

   double ratioX = (double)or_xy_processada.Width / (double)ourPicturebox.Width
   double ratioY = (double)or_xy_processada.Height / (double)ourPicturebox.Height;
   int posX = (int) (e.X * ratioX);
   int posY = (int) (e.Y * ratioY);

【讨论】:

  • 我试过了,但现在它说我没有任何图像,因为我有 try/catch 代码。
  • 无法将 double 转换为 int。
  • 我尝试在 ratiox 和 ratio y 上使用 int,但仍然失败。它转到捕获代码。
  • 现在总是给我点 0,0。 posX = 0 和 posY = 0 是有道理的。
  • 现在总是给我点 0,0。 posX = 0 和 posY = 0 并且有意义。就像 posX= e.X / 640*640 非常接近 0。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-10-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多