保钠

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  26 随笔 :: 1 文章 :: 18 评论 :: 27930 阅读
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

继上篇健康码的文章,其中判断二维码是否绿码的方法ImageToMatExistGreen黄绿码互相识别问题。

在对比之后发现,手机端健康码的颜色是正常,但截图上传到PC端之后,放大图片,会发现:

黄码中会带有很多绿色的点;绿码中也有零星的黄色点;

通过图像二值化对比后确实存在:

绿码中针对color黄 二值化之后如图1,黄码中color绿 二值化之后如图2:

      

                图 1                                    图 2

于是就找到了黄码绿码能互相识别的原因了。

我们可以通过计算来判断是否绿码,修改方法如下:

public bool ImageToMatExistGreen2(Image cutImage)
{
  Bitmap bm = new Bitmap(cutImage);
  Mat srcImg = OpenCvSharp.Extensions.BitmapConverter.ToMat(bm);
  Mat hsvImage = new Mat();
  Cv2.CvtColor(srcImg, hsvImage, ColorConversionCodes.BGR2HSV);
  Mat maskGreen = new Mat();
  Mat maskYellow = new Mat();

  bool green = false;
  int greenNum = 0;
  int yellownum = 0;
  Cv2.InRange(hsvImage, new Scalar(35, 43, 46), new Scalar(77, 255, 255), maskGreen);//绿
  Bitmap bitmapGreen = OpenCvSharp.Extensions.BitmapConverter.ToBitmap(maskGreen);
  bitmapGreen.Save(@"QRcodeImg\bitMapGreen.png");
  for (int r = 0; r < hsvImage.Rows; r++)
  {
    for (int c = 0; c < hsvImage.Cols; c++)
    {
      if (maskGreen.At<byte>(r, c) == 255)
      {
        greenNum++;
      }
    }
  }
  Cv2.InRange(hsvImage, new Scalar(26, 43, 46), new Scalar(34, 255, 255), maskYellow);//黄
  Bitmap bitmapYellow = OpenCvSharp.Extensions.BitmapConverter.ToBitmap(maskYellow);
  bitmapYellow.Save(@"QRcodeImg\bitMapYellow.png");
  for (int r = 0; r < hsvImage.Rows; r++)
  {
    for (int c = 0; c < hsvImage.Cols; c++)
    {
      if (maskYellow.At<byte>(r, c) == 255)
      {
        yellownum++;
      }
    }
  }

  return green = greenNum > yellownum ? true : false;
}

没有情调,不懂浪漫,但朴实无华拥有爱。

 

posted on   保钠  阅读(582)  评论(2编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示