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>");
            }
        }
Beispiel #2
0
 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;
 }
Beispiel #3
0
 /// <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;
 }
Beispiel #4
0
        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);
        }
Beispiel #5
0
 /// <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;
 }
Beispiel #6
0
        /// <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);
        }
Beispiel #7
0
        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);
        }
Beispiel #8
0
        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;
        }
Beispiel #9
0
        /// <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);
        }