| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108 |
- using OpenCvSharp;
- using OpenCvSharp.Extensions;
- using System;
- using System.Drawing;
- using System.IO;
- namespace DaJiaoYan.Utils
- {
- internal class ImageUtils
- {
- internal static Mat Read(string filename, ImreadModes mode = ImreadModes.AnyColor)
- {
- var res = Cv2.ImRead(filename, mode);
- if (res == null || res.Width < 1 || res.Height < 1)
- {
- // 判断图片异常
- try
- {
- Bitmap bitmap = new Bitmap(filename);
- res = ToMat(bitmap);
- }
- catch { }
- }
- return res;
- }
- /// <summary>
- /// image 转 mat
- /// </summary>
- /// <param name="image"></param>
- /// <returns></returns>
- internal static Mat ToMat(Image image)
- {
- Mat mat = null;
- if (image != null)
- {
- Bitmap bmp = new Bitmap(image);
- mat = BitmapConverter.ToMat(bmp);
- bmp.Dispose();
- }
- return mat;
- }
- /// <summary>
- /// 从 stream 转 mat
- /// </summary>
- /// <param name="stream"></param>
- /// <returns></returns>
- internal static Mat ToMat(Stream stream)
- {
- Mat mat = null;
- if (stream != null && stream.Length > 0)
- {
- mat = Mat.FromStream(stream, ImreadModes.AnyColor);
- }
- return mat;
- }
- /// <summary>
- /// 转Base64
- /// </summary>
- /// <param name="filename"></param>
- /// <returns></returns>
- internal static string ToBase64(string filename)
- {
- string res = "";
- try
- {
- using (FileStream fs = new FileStream(filename, FileMode.Open, FileAccess.Read))
- {
- byte[] buffer = new byte[fs.Length];
- fs.Read(buffer, 0, (int)fs.Length);
- res = Convert.ToBase64String(buffer);
- }
- }
- catch { }
- return res;
- }
- internal static void Red2OtherColor(ref Mat img, Scalar scalar, int minThreshold = 10, int maxThreshold = 40)
- {
- Cv2.CvtColor(img, img, ColorConversionCodes.BGR2HSV);
- Mat mask0 = new Mat(), mask1 = new Mat(), mask;
- Cv2.InRange(img,
- new Mat(1, 3, MatType.CV_32S, new Scalar(0, maxThreshold, maxThreshold)),
- new Mat(1, 3, MatType.CV_32S, new Scalar(minThreshold, 255, 255)),
- mask0);
- Cv2.InRange(img,
- new Mat(1, 3, MatType.CV_32S, new Scalar(150, maxThreshold, maxThreshold)),
- new Mat(1, 3, MatType.CV_32S, new Scalar(180, 255, 255)),
- mask1);
- mask = mask0 + mask1;
- Cv2.CvtColor(img, img, ColorConversionCodes.HSV2BGR);
- img.SetTo(scalar, mask);
- mask0?.Dispose();
- mask1?.Dispose();
- mask?.Dispose();
- }
- }
- }
|