/// <summary> /// Print current pixel's coordinate /// </summary> /// <param name="image"></param> /// <param name="iterator"></param> private void PrintCoordinate(IplImage image, CvLineIterator iterator) { /* ROIは設定されていないと仮定している.もし設定されている場合には考慮する必要がある.*/ int offset = iterator.Ptr.ToInt32() - image.ImageData.ToInt32(); int y = offset / image.WidthStep; int x = (offset - y * image.WidthStep) / (3 * sizeof(byte) /* ピクセルのサイズ */); Console.WriteLine("(x:{0}, y:{1})", x, y); }
/// <summary> /// Calculate sum of line pixels (wrapper style) /// </summary> /// <param name="image"></param> /// <param name="pt1"></param> /// <param name="pt2"></param> /// <returns></returns> private CvScalar SumLinePixelsManaged(IplImage image, CvPoint pt1, CvPoint pt2) { double blue_sum = 0, green_sum = 0, red_sum = 0; CvLineIterator iterator = new CvLineIterator(image, pt1, pt2, PixelConnectivity.Connectivity_8, false); foreach (CvScalar pixel in iterator) { blue_sum += pixel.Val0; //blue_sum += iterator.ptr[0]; green_sum += pixel.Val1; //green_sum += iterator.ptr[1]; red_sum += pixel.Val2; //red_sum += iterator.ptr[2]; PrintCoordinate(image, iterator); } return new CvScalar(blue_sum, green_sum, red_sum); }
/// <summary> /// Calculate sum of line pixels (wrapper style) /// </summary> /// <param name="image"></param> /// <param name="pt1"></param> /// <param name="pt2"></param> /// <returns></returns> private CvScalar SumLinePixelsManaged(IplImage image, CvPoint pt1, CvPoint pt2) { double blueSum = 0, greenSum = 0, redSum = 0; var iterator = new CvLineIterator(image, pt1, pt2, PixelConnectivity.Connectivity8, false); foreach (CvScalar pixel in iterator) { blueSum += pixel.Val0; //blue_sum += iterator.ptr[0]; greenSum += pixel.Val1; //green_sum += iterator.ptr[1]; redSum += pixel.Val2; //red_sum += iterator.ptr[2]; PrintCoordinate(image, iterator); } return(new CvScalar(blueSum, greenSum, redSum)); }
/// <summary> /// Print current pixel's coordinate /// </summary> /// <param name="image"></param> /// <param name="iterator"></param> private void PrintCoordinate(IplImage image, CvLineIterator iterator) { /* ROIは設定されていないと仮定している.もし設定されている場合には考慮する必要がある.*/ int offset = iterator.Ptr.ToInt32() - image.ImageData.ToInt32(); int y = offset / image.WidthStep; int x = (offset - y * image.WidthStep) / (3 * sizeof(byte) /* ピクセルのサイズ */); Console.WriteLine("(x:{0}, y:{1})", x, y); }