"AForge.Vision.Tools" недоступен в силу его уровня защиты - C#
Формулировка задачи:
подскажите пожалуйста как побить защиту, вот код взят вот здесь https://github.com/cureos/aforge/blo...nceDetector.cs после сборки выдал ругань на 238 и 248 строки. гуглёж привел меня сюда https://docs.microsoft.com/ru-ru/dot...ibility-levels но при попытке дописать public захожу в тупик. что я не так делаю?
код:
// AForge Vision Library // AForge.NET framework // [url]http://www.aforgenet.com/framework/[/url] // // Copyright © AForge.NET, 2005-2011 // [email]removed@mail.ru[/email] // namespace AForge.Vision.Motion { using System; using System.Drawing.Imaging; using AForge.Imaging; using AForge.Imaging.Filters; /// <summary> /// Motion detector based on two continues frames difference. /// </summary> /// /// <remarks><para>The class implements the simplest motion detection algorithm, which is /// based on difference of two continues frames. The <see cref="MotionFrame">difference frame</see> /// is thresholded and the <see cref="MotionLevel">amount of difference pixels</see> is calculated. /// To suppress stand-alone noisy pixels erosion morphological operator may be applied, which /// is controlled by <see cref="SuppressNoise"/> property.</para> /// /// <para>Although the class may be used on its own to perform motion detection, it is preferred /// to use it in conjunction with <see cref="MotionDetector"/> class, which provides additional /// features and allows to use moton post processing algorithms.</para> /// /// <para>Sample usage:</para> /// <code> /// // create motion detector /// MotionDetector detector = new MotionDetector( /// new TwoFramesDifferenceDetector( ), /// new MotionAreaHighlighting( ) ); /// /// // continuously feed video frames to motion detector /// while ( ... ) /// { /// // process new video frame and check motion level /// if ( detector.ProcessFrame( videoFrame ) > 0.02 ) /// { /// // ring alarm or do somethng else /// } /// } /// </code> /// </remarks> /// /// <seealso cref="MotionDetector"/> /// public class TwoFramesDifferenceDetector : IMotionDetector { // frame's dimension private int width; private int height; private int frameSize; // previous frame of video stream private UnmanagedImage previousFrame; // current frame of video sream private UnmanagedImage motionFrame; // temporary buffer used for suppressing noise private UnmanagedImage tempFrame; // number of pixels changed in the new frame of video stream private int pixelsChanged; // suppress noise private bool suppressNoise = true; // threshold values private int differenceThreshold = 15; private int differenceThresholdNeg = -15; // binary erosion filter private BinaryErosion3x3 erosionFilter = new BinaryErosion3x3( ); // dummy object to lock for synchronization private object sync = new object( ); /// <summary> /// Difference threshold value, [1, 255]. /// </summary> /// /// <remarks><para>The value specifies the amount off difference between pixels, which is treated /// as motion pixel.</para> /// /// <para>Default value is set to <b>15</b>.</para> /// </remarks> /// public int DifferenceThreshold { get { return differenceThreshold; } set { lock ( sync ) { differenceThreshold = Math.Max( 1, Math.Min( 255, value ) ); differenceThresholdNeg = -differenceThreshold; } } } /// <summary> /// Motion level value, [0, 1]. /// </summary> /// /// <remarks><para>Amount of changes in the last processed frame. For example, if value of /// this property equals to 0.1, then it means that last processed frame has 10% difference /// with previous frame.</para> /// </remarks> /// public float MotionLevel { get { lock ( sync ) { return (float) pixelsChanged / ( width * height ); } } } /// <summary> /// Motion frame containing detected areas of motion. /// </summary> /// /// <remarks><para>Motion frame is a grayscale image, which shows areas of detected motion. /// All black pixels in the motion frame correspond to areas, where no motion is /// detected. But white pixels correspond to areas, where motion is detected.</para> /// /// <para><note>The property is set to <see langword="null"/> after processing of the first /// video frame by the algorithm.</note></para> /// </remarks> /// public UnmanagedImage MotionFrame { get { lock ( sync ) { return motionFrame; } } } /// <summary> /// Suppress noise in video frames or not. /// </summary> /// /// <remarks><para>The value specifies if additional filtering should be /// done to suppress standalone noisy pixels by applying 3x3 erosion image processing /// filter.</para> /// /// <para>Default value is set to <see langword="true"/>.</para> /// /// <para><note>Turning the value on leads to more processing time of video frame.</note></para> /// </remarks> /// public bool SuppressNoise { get { return suppressNoise; } set { lock ( sync ) { suppressNoise = value; // allocate temporary frame if required if ( ( suppressNoise ) && ( tempFrame == null ) && ( motionFrame != null ) ) { tempFrame = UnmanagedImage.Create( width, height, PixelFormat.Format8bppIndexed ); } // check if temporary frame is not required if ( ( !suppressNoise ) && ( tempFrame != null ) ) { tempFrame.Dispose( ); tempFrame = null; } } } } /// <summary> /// Initializes a new instance of the <see cref="TwoFramesDifferenceDetector"/> class. /// </summary> /// public TwoFramesDifferenceDetector( ) { } /// <summary> /// Initializes a new instance of the <see cref="TwoFramesDifferenceDetector"/> class. /// </summary> /// /// <param name="suppressNoise">Suppress noise in video frames or not (see <see cref="SuppressNoise"/> property).</param> /// public TwoFramesDifferenceDetector( bool suppressNoise ) { this.suppressNoise = suppressNoise; } /// <summary> /// Process new video frame. /// </summary> /// /// <param name="videoFrame">Video frame to process (detect motion in).</param> /// /// <remarks><para>Processes new frame from video source and detects motion in it.</para> /// /// <para>Check <see cref="MotionLevel"/> property to get information about amount of motion /// (changes) in the processed frame.</para> /// </remarks> /// public unsafe void ProcessFrame( UnmanagedImage videoFrame ) { lock ( sync ) { // check previous frame if ( previousFrame == null ) { // save image dimension width = videoFrame.Width; height = videoFrame.Height; // alocate memory for previous and current frames previousFrame = UnmanagedImage.Create( width, height, PixelFormat.Format8bppIndexed ); motionFrame = UnmanagedImage.Create( width, height, PixelFormat.Format8bppIndexed ); frameSize = motionFrame.Stride * height; // temporary buffer if ( suppressNoise ) { tempFrame = UnmanagedImage.Create( width, height, PixelFormat.Format8bppIndexed ); } // convert source frame to grayscale Tools.ConvertToGrayscale( videoFrame, previousFrame ); return; } // check image dimension if ( ( videoFrame.Width != width ) || ( videoFrame.Height != height ) ) return; // convert current image to grayscale Tools.ConvertToGrayscale( videoFrame, motionFrame ); // pointers to previous and current frames byte* prevFrame = (byte*) previousFrame.ImageData.ToPointer( ); byte* currFrame = (byte*) motionFrame.ImageData.ToPointer( ); // difference value int diff; // 1 - get difference between frames // 2 - threshold the difference // 3 - copy current frame to previous frame for ( int i = 0; i < frameSize; i++, prevFrame++, currFrame++ ) { // difference diff = (int) *currFrame - (int) *prevFrame; // copy current frame to previous *prevFrame = *currFrame; // treshold *currFrame = ( ( diff >= differenceThreshold ) || ( diff <= differenceThresholdNeg ) ) ? (byte) 255 : (byte) 0; } if ( suppressNoise ) { // suppress noise and calculate motion amount AForge.SystemTools.CopyUnmanagedMemory( tempFrame.ImageData, motionFrame.ImageData, frameSize ); erosionFilter.Apply( tempFrame, motionFrame ); } // calculate amount of motion pixels pixelsChanged = 0; byte* motion = (byte*) motionFrame.ImageData.ToPointer( ); for ( int i = 0; i < frameSize; i++, motion++ ) { pixelsChanged += ( *motion & 1 ); } } } /// <summary> /// Reset motion detector to initial state. /// </summary> /// /// <remarks><para>Resets internal state and variables of motion detection algorithm. /// Usually this is required to be done before processing new video source, but /// may be also done at any time to restart motion detection algorithm.</para> /// </remarks> /// public void Reset( ) { lock ( sync ) { if ( previousFrame != null ) { previousFrame.Dispose( ); previousFrame = null; } if ( motionFrame != null ) { motionFrame.Dispose( ); motionFrame = null; } if ( tempFrame != null ) { tempFrame.Dispose( ); tempFrame = null; } } } } }
Решение задачи: «"AForge.Vision.Tools" недоступен в силу его уровня защиты»
textual
Листинг программы
/// // create motion detector /// MotionDetector detector = new MotionDetector( /// new TwoFramesDifferenceDetector( ), /// new MotionAreaHighlighting( ) ); /// /// // continuously feed video frames to motion detector /// while ( ... ) /// { /// // process new video frame and check motion level /// if ( detector.ProcessFrame( videoFrame ) > 0.02 ) /// { /// // ring alarm or do somethng else /// } /// }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д