public static void GenerateConstMeanFile(string _saveDir, ImageColorType colorType) { int totalPixels = (colorType == ImageColorType.RGB) ? 3072 : 1024; int totalChannels = (colorType == ImageColorType.RGB) ? 3 : 1; string[] AvgRGBArrString = new string[totalPixels]; // Save to arr for (int j = 0; j < totalPixels; j++) { AvgRGBArrString[j] = string.Format("{0:E2}", 128); } string dataContentAll = String.Join(" ", AvgRGBArrString); // Save to xml string file_xml = _saveDir + "\\Custom_mean.xml"; if (!File.Exists(file_xml)) { File.Create(file_xml).Dispose(); } using (StreamWriter sw1 = new StreamWriter(file_xml)) { sw1.WriteLine("<?xml version=\"1.0\" ?>"); sw1.WriteLine("<opencv_storage>"); sw1.WriteLine($" <Channel>{totalChannels}</Channel>"); sw1.WriteLine(" <Row>32</Row>"); sw1.WriteLine(" <Col>32</Col>"); sw1.WriteLine(" <MeanImg type_id=\"opencv-matrix\">"); sw1.WriteLine(" <rows>1</rows>"); sw1.WriteLine($" <cols>{totalPixels}</cols>"); sw1.WriteLine(" <dt>f</dt>"); sw1.WriteLine(" <data>" + dataContentAll + "</data>"); sw1.WriteLine(" </MeanImg>"); sw1.WriteLine("</opencv_storage>"); } }
public FreeImageAPI.FIBITMAP GetBitmap(ImageType type, ImageColorType colorType) { FreeImageAPI.FIBITMAP result = new FreeImageAPI.FIBITMAP(); string filename = GetBitmapPath(type, colorType); if (!String.IsNullOrEmpty(filename) && File.Exists(filename)) result = FreeImageAPI.FreeImage.LoadEx(filename); return result; }
/// <summary> /// 转换成灰度图片 /// 灰度策略并不是平均 /// </summary> public void GrayScale() { ProcessEach((CustomProc) delegate(EffImage x, int i, int j) { var color = x.At(i, j); var grayscale = (color.R * 30 + color.G * 59 + color.B * 11) / 100; x.Set(i, j, Color.FromArgb(grayscale, grayscale, grayscale)); }); imageColorType = ImageColorType.GrayScale; }
public FreeImageAPI.FIBITMAP GetBitmap(ImageType type, ImageColorType colorType) { FreeImageAPI.FIBITMAP result = new FreeImageAPI.FIBITMAP(); string filename = GetBitmapPath(type, colorType); if (!String.IsNullOrEmpty(filename) && File.Exists(filename)) { result = FreeImageAPI.FreeImage.LoadEx(filename); } return(result); }
/// <summary> /// 二值化 /// </summary> /// <param name="thresold">前景门限</param> public void Binarization(int thresold) { ProcessEach((CustomProc) delegate(EffImage x, int i, int j) { var c = x.At(i, j); if (c.R < thresold) { x.Set(i, j, Color.Black); } else { x.Set(i, j, Color.White); } }); imageColorType = ImageColorType.Binary; }
/// <summary> /// Gets the check image. /// </summary> /// <param name="side">The side.</param> /// <returns></returns> private BitmapImage GetCheckImage(Sides side) { ImageColorType colorType = RockConfig.Load().ImageColorType; int imageByteCount; imageByteCount = rangerScanner.GetImageByteCount((int)side, (int)colorType); byte[] imageBytes = new byte[imageByteCount]; // create the pointer and assign the Ranger image address to it IntPtr imgAddress = new IntPtr(rangerScanner.GetImageAddress((int)side, (int)colorType)); // Copy the bytes from unmanaged memory to managed memory Marshal.Copy(imgAddress, imageBytes, 0, imageByteCount); BitmapImage bitImage = new BitmapImage(); bitImage.BeginInit(); bitImage.StreamSource = new MemoryStream(imageBytes); bitImage.EndInit(); return(bitImage); }
public string GetBitmapPath(ImageType type, ImageColorType colorType) { string filename = null; switch (type) { case ImageType.Even: switch (colorType) { case ImageColorType.Type_01_Dither: filename = Path.Combine(baseDirectory, "Even", "Image_01_dither.tif"); break; case ImageColorType.Type_01_Threshold: filename = Path.Combine(baseDirectory, "Even", "Image_01_threshold.tif"); break; case ImageColorType.Type_04: filename = Path.Combine(baseDirectory, "Even", "Image_04.tif"); break; case ImageColorType.Type_04_Greyscale_MinIsBlack: filename = Path.Combine(baseDirectory, "Even", "Image_04_gs_minisblack.tif"); break; case ImageColorType.Type_04_Greyscale_Unordered: filename = Path.Combine(baseDirectory, "Even", "Image_04_gs_unordered.tif"); break; case ImageColorType.Type_08: filename = Path.Combine(baseDirectory, "Even", "Image_08.tif"); break; case ImageColorType.Type_08_Greyscale_MinIsBlack: filename = Path.Combine(baseDirectory, "Even", "Image_08_gs_minisblack.tif"); break; case ImageColorType.Type_08_Greyscale_Unordered: filename = Path.Combine(baseDirectory, "Even", "Image_08_gs_unordered.tif"); break; case ImageColorType.Type_16_555: filename = Path.Combine(baseDirectory, "Even", "Image_16_555.bmp"); break; case ImageColorType.Type_16_565: filename = Path.Combine(baseDirectory, "Even", "Image_16_565.bmp"); break; case ImageColorType.Type_24: filename = Path.Combine(baseDirectory, "Even", "Image_24.tif"); break; case ImageColorType.Type_32: filename = Path.Combine(baseDirectory, "Even", "Image_32.tif"); break; } break; case ImageType.Odd: switch (colorType) { case ImageColorType.Type_01_Dither: filename = Path.Combine(baseDirectory, "Odd", "Image_01_dither.tif"); break; case ImageColorType.Type_01_Threshold: filename = Path.Combine(baseDirectory, "Odd", "Image_01_threshold.tif"); break; case ImageColorType.Type_04: filename = Path.Combine(baseDirectory, "Odd", "Image_04.tif"); break; case ImageColorType.Type_04_Greyscale_MinIsBlack: filename = Path.Combine(baseDirectory, "Odd", "Image_04_gs_minisblack.tif"); break; case ImageColorType.Type_04_Greyscale_Unordered: filename = Path.Combine(baseDirectory, "Odd", "Image_04_gs_unordered.tif"); break; case ImageColorType.Type_08: filename = Path.Combine(baseDirectory, "Odd", "Image_08.tif"); break; case ImageColorType.Type_08_Greyscale_MinIsBlack: filename = Path.Combine(baseDirectory, "Odd", "Image_08_gs_minisblack.tif"); break; case ImageColorType.Type_08_Greyscale_Unordered: filename = Path.Combine(baseDirectory, "Odd", "Image_08_gs_unordered.tif"); break; case ImageColorType.Type_16_555: filename = Path.Combine(baseDirectory, "Odd", "Image_16_555.bmp"); break; case ImageColorType.Type_16_565: filename = Path.Combine(baseDirectory, "Odd", "Image_16_565.bmp"); break; case ImageColorType.Type_24: filename = Path.Combine(baseDirectory, "Odd", "Image_24.tif"); break; } break; case ImageType.JPEG: filename = Path.Combine(baseDirectory, "JPEG", "Image.jpg"); break; case ImageType.Metadata: filename = Path.Combine(baseDirectory, "Metadata", "exif.jpg"); break; case ImageType.Multipaged: filename = Path.Combine(baseDirectory, "Multipaged", "Image.tif"); break; } return(filename); }
public string GetBitmapPath(ImageType type, ImageColorType colorType) { string filename = null; switch (type) { case ImageType.Even: switch (colorType) { case ImageColorType.Type_01_Dither: filename = baseDirectory + @"Even\Image_01_dither.tif"; break; case ImageColorType.Type_01_Threshold: filename = baseDirectory + @"Even\Image_01_threshold.tif"; break; case ImageColorType.Type_04: filename = baseDirectory + @"Even\Image_04.tif"; break; case ImageColorType.Type_04_Greyscale_MinIsBlack: filename = baseDirectory + @"Even\Image_04_gs_minisblack.tif"; break; case ImageColorType.Type_04_Greyscale_Unordered: filename = baseDirectory + @"Even\Image_04_gs_unordered.tif"; break; case ImageColorType.Type_08: filename = baseDirectory + @"Even\Image_08.tif"; break; case ImageColorType.Type_08_Greyscale_MinIsBlack: filename = baseDirectory + @"Even\Image_08_gs_minisblack.tif"; break; case ImageColorType.Type_08_Greyscale_Unordered: filename = baseDirectory + @"Even\Image_08_gs_unordered.tif"; break; case ImageColorType.Type_16_555: filename = baseDirectory + @"Even\Image_16_555.bmp"; break; case ImageColorType.Type_16_565: filename = baseDirectory + @"Even\Image_16_565.bmp"; break; case ImageColorType.Type_24: filename = baseDirectory + @"Even\Image_24.tif"; break; case ImageColorType.Type_32: filename = baseDirectory + @"Even\Image_32.tif"; break; } break; case ImageType.Odd: switch (colorType) { case ImageColorType.Type_01_Dither: filename = baseDirectory + @"Odd\Image_01_dither.tif"; break; case ImageColorType.Type_01_Threshold: filename = baseDirectory + @"Odd\Image_01_threshold.tif"; break; case ImageColorType.Type_04: filename = baseDirectory + @"Odd\Image_04.tif"; break; case ImageColorType.Type_04_Greyscale_MinIsBlack: filename = baseDirectory + @"Odd\Image_04_gs_minisblack.tif"; break; case ImageColorType.Type_04_Greyscale_Unordered: filename = baseDirectory + @"Odd\Image_04_gs_unordered.tif"; break; case ImageColorType.Type_08: filename = baseDirectory + @"Odd\Image_08.tif"; break; case ImageColorType.Type_08_Greyscale_MinIsBlack: filename = baseDirectory + @"Odd\Image_08_gs_minisblack.tif"; break; case ImageColorType.Type_08_Greyscale_Unordered: filename = baseDirectory + @"Odd\Image_08_gs_unordered.tif"; break; case ImageColorType.Type_16_555: filename = baseDirectory + @"Odd\Image_16_555.bmp"; break; case ImageColorType.Type_16_565: filename = baseDirectory + @"Odd\Image_16_565.bmp"; break; case ImageColorType.Type_24: filename = baseDirectory + @"Odd\Image_24.tif"; break; } break; case ImageType.JPEG: filename = baseDirectory + @"JPEG\Image.jpg"; break; case ImageType.Metadata: filename = baseDirectory + @"Metadata\exif.jpg"; break; case ImageType.Multipaged: filename = baseDirectory + @"Multipaged\Image.tif"; break; } return filename; }
/// <summary> /// NOTE: 只支持24bit RGB/32bit ARGB, 其他类型需要先使用ToPixelImg进行转换 /// </summary> /// <param name="src"></param> public EffImage(Bitmap src, ImageColorType colorType = ImageColorType.Binary, byte rThreshold = 50, byte gThreshold = 50, byte bThreshold = 50) { width = src.Width; height = src.Height; pixels = new Color[width, height]; // 前景门限 imageColorType = colorType; foregroundThreshold = Color.FromArgb(rThreshold, gThreshold, bThreshold); Rectangle rect = new Rectangle(0, 0, width, height); int offset = 3; if (src.PixelFormat == PixelFormat.Format24bppRgb) { offset = 3; } else if (src.PixelFormat == PixelFormat.Format32bppArgb) { offset = 4; } else { throw new Exception("pixelformat not supported"); } BitmapData srcBmData = src.LockBits(rect, ImageLockMode.ReadWrite, src.PixelFormat); //BITMAPDATA 结构 /* * * Scan0 //指向颜色存储矩阵的首地址</pre> * Stride //行实际字节大小 * Width // 宽度 * BGR BGR BGR BGR XXX(xxx为填充字节) * BGR BGR BGR BGR XXX * (XXX大小为 Stride-(Width*3) ) * */ IntPtr srcScan = srcBmData.Scan0; unsafe { byte *srcP = (byte *)(void *)srcScan; int srcOffset = srcBmData.Stride - width * offset; //该行填充字节大小 byte red, green, blue; for (int y = 0; y < height; y++) { for (int x = 0; x < width; x++, srcP += offset) { blue = srcP[0]; green = srcP[1]; red = srcP[2]; //a = [3] Color c = Color.FromArgb(red, green, blue); pixels[x, y] = c; } srcP += srcOffset;//跳过填充字节 } } src.UnlockBits(srcBmData); }