is a thin template wrapper on top of the Mat class. Mat. Things to know: (1) The code will only compile in Linux environment. Possible parameter names for matrix cv::Mat¶. To access pixel values in an OpenCV cv::Mat object, you first have to know the type of your matrix.. OpenCV C++ comes with this amazing image container Mat that handles everything for us. The most common types are: CV_8UC1 for 8-bit 1-channel grayscale images;; CV_32FC1 for 32-bit floating point 1-channel grayscale images;; CV_8UC3 for 8-bit 3-channel color images; and; CV_32FC3 for 32-bit floating point 3-channel color images. How to create a empty rect? Mat::Mat(int rows, int cols, int type, const Scalar& s) This constructor will create a Mat object with specified number of rows and number of cols and initialize each element with the value given in s. rows - Number of rows in the 2D array ( i.e. With OpenCV, you typically access the values of a Mat with the at(r,c) command. It is … It will only reallocate its matrix data memory if the new size will not fit into the old one. Hi guys, i tried to initialize my Mat variable which size is 4 x 9. I will be posting a simple tutorial for the same, in the coming days. Have I offended my professor by applying to summer research at other universities? As the datatype of this array is 8 bit unsigned integers, each element should have a value from 0 to 255. Initializing static cv::Mat with cv::Mat::zeros causes segmentation fault. We can create a matrix with more than two dimensions. UIImageToMat ends up with random memory values in background of UIImage with alpha. GPU Cuda initialization much slower with opencv libraries. We can use array to initialize the constructor: We specified its dimension of 3, then pass a pointer containing the size for each dimension. It's worth noting that the documentation does things slightly differently:. In this post we will introduce the most used object of the new OpenCV3 library, using C++. The r… ; The default setting … Mat. OpenCV => 3.1 Operating System / Platform => iOS 64 bit Compiler => Xcode 7.3.1. To convert from a NumPy array to a OpenCV Mat: In this article. table is a 1 dimensional array by the way. Possible parameter names for matrix cv::Mat¶. Signed 16bits short - We use this to constructor to create an empty matrix and pass this to other OpenCV methods. Use MatToUIImage and then draw the image. The aim of the Mat object is to represent a matrix. I'm using the EmguCV 3.0.0 wrapper to the OpenCV 3.0 library. If you need more you can create the type with the upper macro, setting the channel number in parenthesis as you can see below. Steps to reproduce. To subscribe to this RSS feed, copy and paste this URL into your RSS reader. Signed 16bits short - We use this to constructor to create an empty matrix and pass this to other OpenCV methods. - height of the image in pixels ) Here's an example of a single channel, 8x8 image made of double values:. We will show how forEach is much faster than naively using the at method or even efficiently using pointer arithmetic.. To compile OpenCV programs, you need to have OpenCV library installed on your system. Why is there a 2 in front of some of these passive component parts? To learn more, see our tips on writing great answers. site design / logo © 2021 Stack Exchange Inc; user contributions licensed under cc by-sa. Create a Mat for it with UIImageToMat. Hence, when using = operator to pass Matlike: You must know that apart from some meta data, m2 and m1 share one memory part for their internal matrix data, and any change you make to the matrix data of m1 or m2 will happen to another one. Use a UIImage created from a png with an alpha channel. Array of [results, dist] results: m x k set of row indices of matching vectors (referring to matrix passed to cvCreateFeatureTree). Once the array is created, it is automatically managed via a reference-counting … Why is there a syntax error if I don't write 'if' in an END block of AWK? Mat. What were the differences between Xenix and Unix? Is it necessary to add "had" in past tense narration when it's clear we're talking about the past? With this approach, you first call a constructor of the Mat class with the proper parameters, and then you just put << operator followed by comma-separated values that can be constants, variables, expressions, and so on. Thanks. The parameters which you add to the cv::Mat, must have a name which fits to the following rules:. In this tutorial, we will compare the performance of the forEach method of the Mat class to other ways of accessing and transforming pixel values in OpenCV. Here is a single channel array with 8 bit unsigned integers. System.loadLibrary(Core.NATIVE_LIBRARY_NAME) Example. We do this using the << operator of Mat. Mat image = new Mat(8, 8, DepthType.Cv64F, 1); Also, note the extra parentheses required to avoid compilation errors. With this approach, you first call a constructor of the Mat class with the proper parameters, and then you just put << operator followed by comma-separated values that can be constants, variables, expressions, and so on. The first character of the name can be followed by an infinite number of alpha-numerical characters (including characters like _ or -). To start using OpenCV, we need to initialize the library, which we can do in our main method: OpenCV.loadShared(); OpenCV is a class that holds methods related to loading native packages required by the OpenCV library for various platforms and architectures.. This wiki page from RidgeRun is about OpenCV CUDA Streams example, profiling with NVIDIA Nsight and understanding CUDA Streams pipelining Cookies help us deliver our services. As the datatype of this array is 8 … With this approach, you first call a constructor of the Mat class with the proper parameters, and then you just put << operator followed by comma-separated values that can be constants, variables, expressions, and so on. How do I achieve the theoretical maximum of 4 FLOPs per cycle? Let's look at other types of initializer which are MATLAB style: We can also use comma separated initializers: Ph.D. / Golden Gate Ave, San Francisco / Seoul National Univ / Carnegie Mellon / UC Berkeley / DevOps / Deep Learning / Visualization. C++ and Python Professional Handbooks : A platform for C++ and Python Engineers, where they can contribute their C++ and Python experience along with tips and tricks. This type is very similar to InputArray except that it is used for input/output and output function parameters. Mat::Mat(int rows, int cols, int type, const Scalar& s) This constructor will create a Mat object with specified number of rows and number of cols and initialize each element with the value given in s. rows - Number of rows in the 2D array ( i.e. Mat. Here is a single channel array with 8 bit unsigned integers. With OpenCV, you typically access the values of a Mat with the at (r,c) command. BogoToBogo The first 'at' selects one of the Mat objects in the vector, the second gives you the specified value in the mat (of the specified type). All the remaining pixel value are unchanged. Can Hollywood discriminate on the race of their actors? Currently there is no support to set OpenCV Mat elements (PR's welcome :-) ). There are hidden gems inside OpenCV that are sometimes not very well known. Mat. Nor this class nor Mat has any virtual methods. Opencv: How to I get and then change values of “Mat vector”, Level Up: Mastering statistics with Python – part 2, What I wish I had known about single page applications, Opt-in alpha test for a new Stacks editor, Visual design changes to the review queues. No data will be copied, so the operation is fast, and any modification on the OpenCV Mat will be done on NumPy array too. By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy. The most common types are: CV_8UC1 for 8-bit 1-channel grayscale images;; CV_32FC1 for 32-bit floating point 1-channel grayscale images;; CV_8UC3 for 8-bit 3-channel color images; and; CV_32FC3 for 32-bit floating point 3-channel color images. On line 50, we initialize snapshot by providing the size of frame, the datatype CV_8UC3 for the Mat array, and a Scalar object representing a black pixel, i.e., cv::Scalar(0,0,0). Contribute to opencv/opencv_contrib development by creating an account on GitHub. Are financial markets "unique" for each "currency pair", or are they simply "translated"? create ( rows, cols, TYPE) - re-allocates new memory to matrix. How Can I Protect Medieval Villages From Plops? C++ STL Vectors: Get iterator from index? We can create a header for an already existing IplImage pointer: Mat mtx(img) makes IplImage pointer img to point Mat. Phet Friction Lab Answer Key,
Identity V Cowboy Persona,
Berkley Public School Mi,
Nicet Fire Alarm,
Deadshot Daiquiri Cold War Upgrades,
San Mateo Fire Evacuation,
Sermon On Deliverance Of The Mind,
Rlcraft Guide Youtube,
" />
Skip to main content
We do this using the << operator of Mat. Our sample program was fairly simplistic. Design: Web Master, The core : Image - load, convert, and save, Signal Processing with NumPy I - FFT and DFT for sine, square waves, unitpulse, and random signal, Signal Processing with NumPy II - Image Fourier Transform : FFT & DFT, Inverse Fourier Transform of an Image with low pass filter: cv2.idft(), Video Capture and Switching colorspaces - RGB / HSV, Adaptive Thresholding - Otsu's clustering-based image thresholding, Edge Detection - Sobel and Laplacian Kernels, Watershed Algorithm : Marker-based Segmentation I, Watershed Algorithm : Marker-based Segmentation II, Image noise reduction : Non-local Means denoising algorithm, Image object detection : Face detection using Haar Cascade Classifiers, Image segmentation - Foreground extraction Grabcut algorithm based on graph cuts, Image Reconstruction - Inpainting (Interpolation) - Fast Marching Methods, Machine Learning : Clustering - K-Means clustering I, Machine Learning : Clustering - K-Means clustering II, Machine Learning : Classification - k-nearest neighbors (k-NN) algorithm, Digital Image Processing 1 - 7 basic functions, Digital Image Processing 2 - RGB image & indexed image, Digital Image Processing 3 - Grayscale image I, Digital Image Processing 4 - Grayscale image II (image data type and bit-plane), Digital Image Processing 5 - Histogram equalization, Digital Image Processing 6 - Image Filter (Low pass filters), Video Processing 1 - Object detection (tagging cars) by thresholding color, Video Processing 2 - Face Detection and CAMShift Tracking, CV_64F (64 bit float floating point number), CV_8UC1 (single channel array with 8 bit unsigned integers), CV_8UC2 (2 channel array with 8 bit unsigned integers), CV_8UC3 (3 channel array with 8 bit unsigned integers), CV_8UC4 (4 channel array with 8 bit unsigned integers), CV_8UC(n) (n channel array with 8 bit unsigned integers (n can be from 1 to 512) ), Mat img(2, 4, CV_32F ); // 2x4 single-channel array with 32 bit floating point numbers, Mat img(3, 5, CV_8FC(4) ); // 3x5 4-channel array with 8 bit floating point numbers, Mat img(Size(480, 360), CV_64UC3 ); //480x360 3-channel array with 64 bit unsigned integers. Gamma correction can be used to correct the brightness of an image by using a non linear transformation between the input values and the mapped output values: \[O = \left( \frac{I}{255} \right)^{\gamma} \times 255\] As this relation is non linear, the effect will not be the same for all the pixels and will depend to their original value. Mat. Asking for help, clarification, or responding to other answers. OpenCV 3, the Mat object. The example code in this article walks you through creating a simple app that obtains frames from a color … The same limitation as for InputArray: Do not explicitly create OutputArray instances applies here too.. Following functions are required for reading and displaying an image in OPenCV: The Scalar is four element short vector. The name starts with a lower or upper case character, hence a value between a-z or A-Z. To further increase on this answer; You would need to use; refchannel.at(i).at(j,k). The name starts with a lower or upper case character, hence a value between a-z or A-Z. Thanks for contributing an answer to Stack Overflow! Gamma correction can be used to correct the brightness of an image by using a non linear transformation between the input values and the mapped output values: \[O = \left( \frac{I}{255} \right)^{\gamma} \times 255\] As this relation is non linear, the effect will not be the same for all the pixels and will depend to their original value. ← Opencv OCR Tutoiral: Build Tesseract OCR Library 3.02.02 with Qt 5.4 Mingw on Windows Image Zoom Out and Zoom In using OpenCV → Leave a Reply Cancel reply Use a UIImage created from a png with an alpha channel. I want to do an operation like this however I cannot get the values of the vector Mat and change them. However, if we run after modifying the size: As we can see from the above example, we cannot initialize the matrix values with this constructor. depth - returns data type of matrix. Reward Category : Most Viewed Article and Most Liked Article Instead, OpenCV already has a function that does exactly this: convertTo. UIImageToMat ends up with random memory values in background of UIImage with alpha. we want to use unsigned char types('U') that are 8 bit long and each pixel has 3 of these to form the 3 channels. Just like with InputArray, OpenCV users should not care about OutputArray, they just pass Mat, vector etc. at (row, col)[channel] - returns pointer to image location. The parameters which you add to the cv::Mat, must have a name which fits to the following rules:. The first character of the name can be followed by an infinite number of alpha-numerical characters (including characters like _ or -). I'm using the Mat class in a few places. We'll learn how we can write a matrix to an image file, however, for debugging purposes it's much more convenient to see the actual values. We do this using the << operator of Mat. To access pixel values in an OpenCV cv::Mat object, you first have to know the type of your matrix.. Steps to reproduce. Add constructors taking initializer_list for some of OpenCV data types () * Add a constructor taking initializer_list for Matx * Add a constructor taking initializer list for Mat and Mat_ * Add one more method to initialize Mat to the corresponding tutorial * Add a note how to initialize … If the pixel intensity value at (x, y) in source image, is greater than threshold, the value at (x, y) in the final image is set to ‘0’. The following is the explanation to the C++ code to create a single colored blank image in C++ using the tool OpenCV. A workaround is work with NumPy arrays and create a OpenCV MatX using the from_array class method. Where do you cut drywall if you need to remove it but still want to easily put it back up? How can I get the max (or min) value in a vector? to the functions. channels - returns the number of channels. cross () - computes cross product of two matricies. With this approach, you first call a constructor of the Mat class with the proper parameters, and then you just put << operator followed by comma-separated values that can be constants, variables, expressions, and so on. By using our services, you agree to our use of cookies. Along the way, we have also looked at some other OpenCV classes, such as Size, Scalar, and Rect.We have also successfully run our very first OpenCV Hello World program. Once the array is created, it is automatically managed via a reference-counting mechanism. Specify it and you can initialize all matrix points with a custom value. Join Stack Overflow to learn, share knowledge, and build your career. Is the pseudoinverse the same as least squares with regularization? clone - returns a deep copy of the image. And the first thing to remember about Mat is to treat it like a smart pointer (like shared_ptr) with the addition of some meta data (like cols rows etc), instead of an ordinary struct or container (like std::vector). Sponsor Open Source development activities and free contents for everyone. 7.8.2. rev 2021.2.26.38663, Stack Overflow works best with JavaScript enabled, Where developers & technologists share private knowledge with coworkers, Programming & related technical career opportunities, Recruit tech talent & build your employer brand, Reach developers & technologists worldwide, Yes since I dont konw how to reach that value I wrote somthing like what I mean, I edited it that way it does not work as well. Making statements based on opinion; back them up with references or personal experience. Example. It does not have any extra data fields. The mostly used basic structure in OpenCV C++ is Mat. Use MatToUIImage and then draw the image. 7.8.2. Also, note the extra parentheses required to avoid compilation errors. Here is a single channel array with 8 bit unsigned integers. OpenCV => 3.1 Operating System / Platform => iOS 64 bit Compiler => Xcode 7.3.1. Contains -1 in some columns if fewer than k neighbors found. So, put the two files in a directory called Tutorials and run cmake: Here is the convention for the data type used in CV_8UC3: So, here is the meaning of the CV_8UC3: How do telecom companies survive when everyone suddenly knows telepathy? So far, you have learnt in detail about the Mat class, what it represents, how to initialize instances of the Mat class, and the different ways to create Mat objects. Use C/C++ arrays and initialize via constructor int sz = {2,2,2}; We'll learn how we can write a matrix to an image file, however, for debugging purposes it's much more convenient to see the actual values. The only change seen from a standard C++ program is the inclusion of namespace cv which contains all the OpenCV functions, classes, and data structures. Connected a new faucet, the pipes drip but only a little bit, is that a problem? OpenCv: How to convert vector to Mat (CV_8U), Replacing a 32-bit loop counter with 64-bit introduces crazy performance deviations with _mm_popcnt_u64 on Intel CPUs, Convert vector to vector file Opencv, How to get access to vector mat object in OpenCV. - height of the image in pixels ) MatOfPoint src; // initialize src MatOfPoint2f dst = new MatOfPoint2f(); src.convertTo(dst, CvType.CV_32F); I have found this to be significantly faster and more memory-friendly. With this approach, you first call a constructor of the Mat class with the proper parameters, and then you just put << operator followed by comma-separated values that can be constants, variables, expressions, and so on. Repository for OpenCV's extra modules. To convert a MatOfPoint2f to a MatOfPoint, use CvType.CV_32S instead. Test if this works (code is assuming that … Also, note the extra parentheses required to avoid compilation errors. Connect and share knowledge within a single location that is structured and easy to search. Thus, references or pointers to these two classes can be freely but carefully converted one to another. Create a Mat for it with UIImageToMat. contactus@bogotobogo.com, Copyright © 2020, bogotobogo Lowering pitch sound of a piezoelectric buzzer, A human settled alien planet where even children are issued blasters and must be good at using them to kill constantly attacking lifeforms, How to enter a repeating decimal in Mathematica. No problem here. Async Initialization of OpenCV on Android using OpenCVManager. We'll learn how we can write a matrix to an image file, however, for debugging purposes it's much more convenient to see the actual values. Java OpenCV only allows to push_back Mats, so the scalar values must be converted to a single row Mat. Also, note the extra parentheses required to … This article shows you how to use the Open Source Computer Vision Library (OpenCV), a native code library that provides a wide variety of image processing algorithms, with the MediaFrameReader class that can read media frames from multiple sources simulataneously. Also, note the extra parentheses required to avoid compilation errors. Static Initialization on OpenCV Android. Do we say "The dog mistook/misunderstood his image in the mirror for another dog"? The class Mat_<_Tp> is a thin template wrapper on top of the Mat class. Mat. Things to know: (1) The code will only compile in Linux environment. Possible parameter names for matrix cv::Mat¶. To access pixel values in an OpenCV cv::Mat object, you first have to know the type of your matrix.. OpenCV C++ comes with this amazing image container Mat that handles everything for us. The most common types are: CV_8UC1 for 8-bit 1-channel grayscale images;; CV_32FC1 for 32-bit floating point 1-channel grayscale images;; CV_8UC3 for 8-bit 3-channel color images; and; CV_32FC3 for 32-bit floating point 3-channel color images. How to create a empty rect? Mat::Mat(int rows, int cols, int type, const Scalar& s) This constructor will create a Mat object with specified number of rows and number of cols and initialize each element with the value given in s. rows - Number of rows in the 2D array ( i.e. With OpenCV, you typically access the values of a Mat with the at(r,c) command. It is … It will only reallocate its matrix data memory if the new size will not fit into the old one. Hi guys, i tried to initialize my Mat variable which size is 4 x 9. I will be posting a simple tutorial for the same, in the coming days. Have I offended my professor by applying to summer research at other universities? As the datatype of this array is 8 bit unsigned integers, each element should have a value from 0 to 255. Initializing static cv::Mat with cv::Mat::zeros causes segmentation fault. We can create a matrix with more than two dimensions. UIImageToMat ends up with random memory values in background of UIImage with alpha. GPU Cuda initialization much slower with opencv libraries. We can use array to initialize the constructor: We specified its dimension of 3, then pass a pointer containing the size for each dimension. It's worth noting that the documentation does things slightly differently:. In this post we will introduce the most used object of the new OpenCV3 library, using C++. The r… ; The default setting … Mat. OpenCV => 3.1 Operating System / Platform => iOS 64 bit Compiler => Xcode 7.3.1. To convert from a NumPy array to a OpenCV Mat: In this article. table is a 1 dimensional array by the way. Possible parameter names for matrix cv::Mat¶. Signed 16bits short - We use this to constructor to create an empty matrix and pass this to other OpenCV methods. Use MatToUIImage and then draw the image. The aim of the Mat object is to represent a matrix. I'm using the EmguCV 3.0.0 wrapper to the OpenCV 3.0 library. If you need more you can create the type with the upper macro, setting the channel number in parenthesis as you can see below. Steps to reproduce. To subscribe to this RSS feed, copy and paste this URL into your RSS reader. Signed 16bits short - We use this to constructor to create an empty matrix and pass this to other OpenCV methods. - height of the image in pixels ) Here's an example of a single channel, 8x8 image made of double values:. We will show how forEach is much faster than naively using the at method or even efficiently using pointer arithmetic.. To compile OpenCV programs, you need to have OpenCV library installed on your system. Why is there a 2 in front of some of these passive component parts? To learn more, see our tips on writing great answers. site design / logo © 2021 Stack Exchange Inc; user contributions licensed under cc by-sa. Create a Mat for it with UIImageToMat. Hence, when using = operator to pass Matlike: You must know that apart from some meta data, m2 and m1 share one memory part for their internal matrix data, and any change you make to the matrix data of m1 or m2 will happen to another one. Use a UIImage created from a png with an alpha channel. Array of [results, dist] results: m x k set of row indices of matching vectors (referring to matrix passed to cvCreateFeatureTree). Once the array is created, it is automatically managed via a reference-counting … Why is there a syntax error if I don't write 'if' in an END block of AWK? Mat. What were the differences between Xenix and Unix? Is it necessary to add "had" in past tense narration when it's clear we're talking about the past? With this approach, you first call a constructor of the Mat class with the proper parameters, and then you just put << operator followed by comma-separated values that can be constants, variables, expressions, and so on. Thanks. The parameters which you add to the cv::Mat, must have a name which fits to the following rules:. In this tutorial, we will compare the performance of the forEach method of the Mat class to other ways of accessing and transforming pixel values in OpenCV. Here is a single channel array with 8 bit unsigned integers. System.loadLibrary(Core.NATIVE_LIBRARY_NAME) Example. We do this using the << operator of Mat. Mat image = new Mat(8, 8, DepthType.Cv64F, 1); Also, note the extra parentheses required to avoid compilation errors. With this approach, you first call a constructor of the Mat class with the proper parameters, and then you just put << operator followed by comma-separated values that can be constants, variables, expressions, and so on. The first character of the name can be followed by an infinite number of alpha-numerical characters (including characters like _ or -). To start using OpenCV, we need to initialize the library, which we can do in our main method: OpenCV.loadShared(); OpenCV is a class that holds methods related to loading native packages required by the OpenCV library for various platforms and architectures.. This wiki page from RidgeRun is about OpenCV CUDA Streams example, profiling with NVIDIA Nsight and understanding CUDA Streams pipelining Cookies help us deliver our services. As the datatype of this array is 8 … With this approach, you first call a constructor of the Mat class with the proper parameters, and then you just put << operator followed by comma-separated values that can be constants, variables, expressions, and so on. How do I achieve the theoretical maximum of 4 FLOPs per cycle? Let's look at other types of initializer which are MATLAB style: We can also use comma separated initializers: Ph.D. / Golden Gate Ave, San Francisco / Seoul National Univ / Carnegie Mellon / UC Berkeley / DevOps / Deep Learning / Visualization. C++ and Python Professional Handbooks : A platform for C++ and Python Engineers, where they can contribute their C++ and Python experience along with tips and tricks. This type is very similar to InputArray except that it is used for input/output and output function parameters. Mat::Mat(int rows, int cols, int type, const Scalar& s) This constructor will create a Mat object with specified number of rows and number of cols and initialize each element with the value given in s. rows - Number of rows in the 2D array ( i.e. Mat. Here is a single channel array with 8 bit unsigned integers. With OpenCV, you typically access the values of a Mat with the at (r,c) command. BogoToBogo The first 'at' selects one of the Mat objects in the vector, the second gives you the specified value in the mat (of the specified type). All the remaining pixel value are unchanged. Can Hollywood discriminate on the race of their actors? Currently there is no support to set OpenCV Mat elements (PR's welcome :-) ). There are hidden gems inside OpenCV that are sometimes not very well known. Mat. Nor this class nor Mat has any virtual methods. Opencv: How to I get and then change values of “Mat vector”, Level Up: Mastering statistics with Python – part 2, What I wish I had known about single page applications, Opt-in alpha test for a new Stacks editor, Visual design changes to the review queues. No data will be copied, so the operation is fast, and any modification on the OpenCV Mat will be done on NumPy array too. By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy. The most common types are: CV_8UC1 for 8-bit 1-channel grayscale images;; CV_32FC1 for 32-bit floating point 1-channel grayscale images;; CV_8UC3 for 8-bit 3-channel color images; and; CV_32FC3 for 32-bit floating point 3-channel color images. On line 50, we initialize snapshot by providing the size of frame, the datatype CV_8UC3 for the Mat array, and a Scalar object representing a black pixel, i.e., cv::Scalar(0,0,0). Contribute to opencv/opencv_contrib development by creating an account on GitHub. Are financial markets "unique" for each "currency pair", or are they simply "translated"? create ( rows, cols, TYPE) - re-allocates new memory to matrix. How Can I Protect Medieval Villages From Plops? C++ STL Vectors: Get iterator from index? We can create a header for an already existing IplImage pointer: Mat mtx(img) makes IplImage pointer img to point Mat.
Phet Friction Lab Answer Key,
Identity V Cowboy Persona,
Berkley Public School Mi,
Nicet Fire Alarm,
Deadshot Daiquiri Cold War Upgrades,
San Mateo Fire Evacuation,
Sermon On Deliverance Of The Mind,
Rlcraft Guide Youtube,