继上篇健康码的文章,其中判断二维码是否绿码的方法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;
}
没有情调,不懂浪漫,但朴实无华拥有爱。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!