Skip to main content

OpenCV : Create Mat Object

What is Mat Class 
The basic Image Container, an n-dimensional dense numerical single-channel or multi-channel array.


1. Costructor
 You can create Mat object by different ways.


Mat mat(3, 3, CV_32F);
Mat mat2(10, 2, CV_64FC2); // 2x10 64 bit float 2 channelMat img(Size(5, 3), CV_32FC3); // 5x3 32bit float 3 channelMat mat3(2, 3, CV_8U, Scalar(255)); // 3x2 8bit unsign_int, all elements set 255 

Warining
When you create mat object by using Size or Point class, yout have to reverse rows and columns.


2. Set Elements
When you create Mat object without data, the elements is set to '0' by defaults. If you want to change elements, you can use setTo, Mat::ones, Mat::zeros, Mat::eye method.


Mat mat(3, 3, CV_32F);
mat.setTo(10); // all elements set to 10
Mat mat7 = Mat::ones(3, 5, CV_32F); // all elements set to '1'Mat mat8 = Mat::zeros(2, 3, CV_32F); // all elements set to '0'Mat mat9 = Mat::eye(3, 3, CV_32F); // make Unit matrix

Or can use arrays

float data[] = {
        1.1f, 2.2f, 3.3f,
        4.4f, 5.5f, 6.6f};
Mat mat4(2, 3, CV_32F, data); // declare and set elements by using arrays

if you want to change specific elements, change specific elements in arrays.

Mat mat4(2, 3, CV_32F, data); 
data[0] = 2.7f;
cout << mat4 << endl; // (0,0) is changed 1.1f -> 2.7f



3. Mat_ Class
Mat_ class inherited the Mat Class.

Mat_ <int> mat10(2, 4);
Mat_ <int> mat11(3, 3, 10);
mat10 << 1,2,3,4,5,6,7,8; // set elements in mat10 object


4. Matx Class (Simple Mat)
Matx class is useful to create simple mat object.

Matx<int, 3,3> m1(1,2,3,4,5,6,7,8,9);
Matx<int, 3,2> m2(1,2,3); // not setting default elements set to '0'

Comments

Popular posts from this blog

OpenGL SL - Translate, roate, and scale

Translate, rotate and scale are most basic element of image effect. If you didn't understand how make effect at each pixel, please read again before post "Show Video and Image" . 1. Translate Translation means each pixel move parallel on the x, y-axis. In other words, if you want to translate 0.25 on the x-axis, a pixel should point to a distance of -0.25 from the original. Translate ex) void mainImage( out vec4 fragColor, in vec2 fragCoord ){     vec2 uv = fragCoord/iResolution.xy;     if (uv.x < 0.5 ){         // translate to x ( -0.25 )         uv.x += 0.25 ;     } else {         // translate to x ( +0.25 )         uv.x -= 0.25 ;     }     fragColor = texture (iChannel0, uv); } result) 2. Scale Scale also has a  similar concept to parallel translation. If you want to zoom in twice, each pixel s...

OpenGL SL - Mosaic effect

Mosaic effect is similar to lowering the resolution of an image. Let's see example image. And full source code likes below. void mainImage( out vec4 fragColor, in vec2 fragCoord ){     // Normalized pixel coordinates (from 0 to 1)     vec2 uv = fragCoord/iResolution.xy;     if (uv.x > 0.7 && uv.y < 0.4 ){          //left bottoom small image         uv.x -= 0.6 ;         uv *= 2.0 ;         fragColor = texture (iChannel0, uv);         fragColor += vec4 ( 0.2 );         return ;     }     //mosaic effect     uv = uv * 30.0 ;     vec2 uv = floor (uv);     uv = uv/ 30.0 ;     fragColor = texture (iChannel0, uv); } The key function of mosaic effect is "floor" If you want to make it sharper, multiply uv by ...

OpenCV : How to setting OpenCV in CLion

CLion is A Cross-Platform IDE for C and C++ by JetBrains Setting OpenCV in CLion is so easy. FIrst, make new c++ project. Second, edit CmakeList.txt cmake_minimum_required( VERSION 3.10 ) project( [YourProject] ) set( CMAKE_CXX_STANDARD 11 ) find_package( OpenCV REQUIRED ) add_executable( [YourProject] main.cpp ) target_link_libraries( [YourProject] ${OpenCV_LIBS} ) At Last include OpenCV to main.cpp #include <iostream> #include "opencv2/opencv.hpp" using namespace std ; using namespace cv ; ...