픽셀값 128
Mat img2(480, 640, CV_8UC1);
Mat img5(480, 640, CV_8UC1, Scalar(128));
픽셀값 Red
Mat img3(480, 640, CV_8UC3);
Mat img4(Size(640, 480), CV_8UC3);
Mat img6(480, 640, CV_8UC3, Scalar(0, 0, 255));
Mat mat1 = Mat::zeros(3, 3, CV_32SC1);
Mat mat1 = Mat::ones(3, 3, CV_32SC1);
Mat mat1 = Mat::eye(3, 3, CV_32SC1);
data 주소 참조
float data[] = {1, 2, 3, 4, 5, 6};
Mat mat4(2, 3, CV_32FC1, data);
Mat mat6 = Mat_<uchar>({2, 3}, {1, 2, 3, 4, 5, 6});
픽셀값 Blue
mat4.create(256, 256, CV_8UC3);
mat4 = Scalar(255, 0, 0);
mat5.create(4, 4, CV_32FC1);
mat5.setTo(1.f);
img1을 img2에 참조 복사
하나의 주소를 2개의 변수가 가리킴
Mat img2 = img1;
새로운 메모리 할당 후 복사
img1을 img4에 깊은 복사
img1을 img5에 깊은 복사
Mat img4 = img1.clone();
img1.copyTo(img5);
img1의 사각형 부분 img2에 참조 크롭
Mat img2 = img1(Rect(220, 120, 340, 240));
img1의 사각형 부분 img3에 깊은 크롭
Mat img3 = img1(Rect(220, 120, 340, 240)).clone();
template<typename _Tp> _Tp& Mat::at(int y, int x)
y : 참조할 행
x : 참조할 열
zeros 행렬 선언 후 모든 픽셀에 1 더하기
Mat mat1 = Mat::zeros(3, 4, CV_8UC1);
for (int y = 0; y < mat1.rows; y++) {
for (int x = 0; x < mat1.cols; x++) {
mat1.at<uchar>(y, x)++;
}
}
template<typename _Tp> _Tp* Mat::ptr(int y)
y : 참조할 행
return : y번 행 시작 주소
모든 픽셀에 1 더하기
for (int y = 0; y < mat1.rows; y++) {
uchar* p = mat1.ptr<uchar>(y);
for (int x = 0; x < mat1.cols; x++) {
p[x]++;
}
}
<T>
영상의 크기를 모르더라도 사용가능
성능은 느린 편
for (MatIterator_<uchar> it = mat1.begin<uchar>();
it != mat1.end<uchar>(); ++it) {
(*it)++;
}
2x2 float {1, 1, 2, 3} 행렬 mat1
역행렬 mat2
mat1의 전치행렬
float data[] = {1, 1, 2, 3};
Mat mat1(2, 2, CV_32FC1, data);
Mat mat2 = mat1.inv();
mat1.t()