opencvsharp 에서 Mat 픽 셀 점 을 옮 겨 다 니 는 두 가지 방법

3799 단어 항목
1.C\#에서 포인터 로 unsafe 에서 실 행 됩 니 다.생 성 중 안전 하지 않 은 코드 를 선택 하 십시오.방법 은 C++와 완전히 같 습 니 다.자세 한 내용 은 C++에서 픽 셀 점 을 옮 겨 다 니 는 것 을 보십시오.
public unsafe static Mat ConvolutionImage(Mat img, double[,] k, int offsetH, int offsetW, int height, int width)
        {
            Mat src = new Mat(img, new Rect(offsetW, offsetH, width, height));
            Mat dst = new Mat(src.Size(), MatType.CV_8UC1, new Scalar(0));
            int rows = src.Height, cols = src.Width;
            int v;
            for(int i = 1; i < rows -1; i++)
            {
                IntPtr a = dst.Ptr(i);
                byte* b = (byte*)a.ToPointer();
                for (int j = 1; j < cols - 1; j++)
                {
                    b[j] = 200;

                }
            }
            //for(int i = 1; i < rows -1; i++)
            //{
            //    for(int j = 1; j < cols -1; j++)
            //    {
            //        v = (int)Math.Abs(k[0, 0] * src.Get(i - 1, j - 1) + k[0, 2] * src.Get(i - 1, j + 1) + k[0, 1] * src.Get(i - 1, j) + k[2, 1] * src.Get(i + 1, j));
            //        v =(int)(255 - 2 * v + 2 * k[1, 1] * src.Get(i, j));
            //        v = v > 0 ? v : 0;
            //        v = v < 255 ? v : 255;
            //        dst.Set(i, j, v);
            //    }
            //}
            return dst;
        }

2.C\#의 get 과 set 방법 으로 속도 가 느 립 니 다.
//for(int i = 1; i < rows -1; i++)
            //{
            //    for(int j = 1; j < cols -1; j++)
            //    {
            //        v = (int)Math.Abs(k[0, 0] * src.Get(i - 1, j - 1) + k[0, 2] * src.Get(i - 1, j + 1) + k[0, 1] * src.Get(i - 1, j) + k[2, 1] * src.Get(i + 1, j));
            //        v =(int)(255 - 2 * v + 2 * k[1, 1] * src.Get(i, j));
            //        v = v > 0 ? v : 0;
            //        v = v < 255 ? v : 255;
            //        dst.Set(i, j, v);
            //    }
            //}

좋은 웹페이지 즐겨찾기