当前位置: 首页>>代码示例>>C#>>正文


C# Mat.Depth方法代码示例

本文整理汇总了C#中OpenCvSharp.CPlusPlus.Mat.Depth方法的典型用法代码示例。如果您正苦于以下问题:C# Mat.Depth方法的具体用法?C# Mat.Depth怎么用?C# Mat.Depth使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在OpenCvSharp.CPlusPlus.Mat的用法示例。


在下文中一共展示了Mat.Depth方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。

示例1: ToMat

        /// <summary>
        /// System.Drawing.BitmapからOpenCVのMatへ変換して返す.
        /// </summary>
        /// <param name="src">変換するSystem.Drawing.Bitmap</param>
        /// <param name="dst">変換結果を格納するMat</param>
#else
        /// <summary>
        /// Converts System.Drawing.Bitmap to Mat
        /// </summary>
        /// <param name="src">System.Drawing.Bitmap object to be converted</param>
        /// <param name="dst">A Mat object which is converted from System.Drawing.Bitmap</param>
#endif
        public static unsafe void ToMat(this Bitmap src, Mat dst)
        {
            if (src == null)
                throw new ArgumentNullException("src");
            if (dst == null)
                throw new ArgumentNullException("dst");
            if (dst.IsDisposed)
                throw new ArgumentException("The specified dst is disposed.", "dst");
            if (dst.Depth() != MatType.CV_8U)
                throw new NotSupportedException("Mat depth != CV_8U");
            if (dst.Dims() != 2)
                throw new NotSupportedException("Mat dims != 2");
            if (src.Width != dst.Width || src.Height != dst.Height)
                throw new ArgumentException("src.Size != dst.Size");

            int w = src.Width;
            int h = src.Height;
            Rectangle rect = new Rectangle(0, 0, w, h);
            BitmapData bd = null;
            try
            {
                bd = src.LockBits(rect, ImageLockMode.ReadOnly, src.PixelFormat);

                byte* p = (byte*)bd.Scan0.ToPointer();
                int sstep = bd.Stride;
                int offset = sstep - (w / 8);
                uint dstep = (uint)dst.Step();
                IntPtr dstData = dst.Data;
                byte* dstPtr = (byte*)dstData.ToPointer();

                bool submat = dst.IsSubmatrix();
                bool continuous = dst.IsContinuous();

                switch (src.PixelFormat)
                {
                    case PixelFormat.Format1bppIndexed:
                    {
                        if (dst.Channels() != 1)                        
                            throw new ArgumentException("Invalid nChannels");
                        if (submat)
                            throw new NotImplementedException("submatrix not supported");

                        int x = 0;
                        int y;
                        int bytePos;
                        byte b;
                        int i;
                        for (y = 0; y < h; y++)
                        {
                            // 横は必ず4byte幅に切り上げられる。
                            // この行の各バイトを調べていく
                            for (bytePos = 0; bytePos < sstep; bytePos++)
                            {
                                if (x < w)
                                {
                                    // 現在の位置のバイトからそれぞれのビット8つを取り出す
                                    b = p[bytePos];
                                    for (i = 0; i < 8; i++)
                                    {
                                        if (x >= w)
                                        {
                                            break;
                                        }
                                        // IplImageは8bit/pixel
                                        dstPtr[dstep * y + x] = ((b & 0x80) == 0x80) ? (byte)255 : (byte)0;
                                        b <<= 1;
                                        x++;
                                    }
                                }
                            }
                            // 次の行へ
                            x = 0;
                            p += sstep;
                        }
                    }
                        break;

                    case PixelFormat.Format8bppIndexed:
                    case PixelFormat.Format24bppRgb:
                    {
                        if (src.PixelFormat == PixelFormat.Format8bppIndexed)
                            if (dst.Channels() != 1)
                                throw new ArgumentException("Invalid nChannels");
                        if (src.PixelFormat == PixelFormat.Format24bppRgb)
                            if (dst.Channels() != 3)
                                throw new ArgumentException("Invalid nChannels");

                        // ステップが同じで連続なら、一気にコピー
//.........这里部分代码省略.........
开发者ID:MJunak,项目名称:opencvsharp,代码行数:101,代码来源:BitmapConverter_Mat.cs

示例2: KinectImagetoMat

        //bufferをもとに白黒Matデータ作成
        private void KinectImagetoMat(Mat mat, byte[] buffer)
        {

            int channel = mat.Channels();
            int depth = mat.Depth();
            unsafe
            {
                byte* matPtr = mat.DataPointer;
                for (int i = 0; i < this.imageWidth * this.imageHeight; i++)
                {
                    if (buffer[i] == 255)
                    {
                        for (int j = 0; j < channel; j++)
                        {
                            *(matPtr + i * channel + j) = 255;
                        }
                    }
                    else
                    {
                        for (int j = 0; j < channel; j++)
                        {
                            *(matPtr + i * channel + j) = 0;
                        }
                    }

                }
            }
        }
开发者ID:mahoo168,项目名称:mahoo,代码行数:29,代码来源:KinectDevice.cs

示例3: ToBitmap

        /// <summary>
        /// OpenCVのMatを指定した出力先にSystem.Drawing.Bitmapとして変換する
        /// </summary>
        /// <param name="src">変換するMat</param>
        /// <param name="dst">出力先のSystem.Drawing.Bitmap</param>
        /// <remarks>Author: shimat, Gummo (ROI support)</remarks>
#else
        /// <summary>
        /// Converts Mat to System.Drawing.Bitmap
        /// </summary>
        /// <param name="src">Mat</param>
        /// <param name="dst">Mat</param>
        /// <remarks>Author: shimat, Gummo (ROI support)</remarks>
#endif
        public static unsafe void ToBitmap(Mat src, Bitmap dst)
        {
            if (src == null)
                throw new ArgumentNullException("src");
            if (dst == null)
                throw new ArgumentNullException("dst");
            if (src.IsDisposed)
                throw new ArgumentException("The image is disposed.", "src");
            if (src.Depth() != MatType.CV_8U)
                throw new ArgumentException("Depth of the image must be CV_8U");
            //if (src.IsSubmatrix())
            //    throw new ArgumentException("Submatrix is not supported");
            if (src.Width != dst.Width || src.Height != dst.Height)
                throw new ArgumentException("");

            PixelFormat pf = dst.PixelFormat;

            // 1プレーン用の場合、グレースケールのパレット情報を生成する
            if (pf == PixelFormat.Format8bppIndexed)
            {
                ColorPalette plt = dst.Palette;
                for (int x = 0; x < 256; x++)
                {
                    plt.Entries[x] = Color.FromArgb(x, x, x);
                }
                dst.Palette = plt;
            }

            int w = src.Width;
            int h = src.Height;
            Rectangle rect = new Rectangle(0, 0, w, h);
            BitmapData bd = null;

            try
            {
                bd = dst.LockBits(rect, ImageLockMode.WriteOnly, pf);


                byte* psrc = (byte*)(src.DataStart.ToPointer());
                byte* pdst = (byte*)(bd.Scan0.ToPointer());
                int ch = src.Channels();
                int sstep = (int)src.Step();
                int dstep = ((src.Width * ch) + 3) / 4 * 4; // 4の倍数に揃える
                int stride = bd.Stride;

                switch (pf)
                {
                    case PixelFormat.Format1bppIndexed:
                    {
                        // BitmapDataは4byte幅だが、IplImageは1byte幅
                        // 手作業で移し替える				 
                        //int offset = stride - (w / 8);
                        int x = 0;
                        int y;
                        int bytePos;
                        byte mask;
                        byte b = 0;
                        int i;
                        for (y = 0; y < h; y++)
                        {
                            for (bytePos = 0; bytePos < stride; bytePos++)
                            {
                                if (x < w)
                                {
                                    for (i = 0; i < 8; i++)
                                    {
                                        mask = (byte)(0x80 >> i);
                                        if (x < w && psrc[sstep * y + x] == 0)
                                            b &= (byte)(mask ^ 0xff);
                                        else
                                            b |= mask;

                                        x++;
                                    }
                                    pdst[bytePos] = b;
                                }
                            }
                            x = 0;
                            pdst += stride;
                        }
                        break;
                    }

                    case PixelFormat.Format8bppIndexed:
                    case PixelFormat.Format24bppRgb:
                    case PixelFormat.Format32bppArgb:
//.........这里部分代码省略.........
开发者ID:jorik041,项目名称:opencvsharp,代码行数:101,代码来源:BitmapConverter2.cs


注:本文中的OpenCvSharp.CPlusPlus.Mat.Depth方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。