OpenCV加载-修改-保存图像
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace std;
using namespace cv;
int main() {
Mat src = imread("D:/OpencvProjects/testOpenCV/lena.jpg");
if (src.empty()) {
cout << "Image can not be loaded correctly!" << endl;
return -1;
}
namedWindow("Raw_image", CV_WINDOW_AUTOSIZE);
imshow("Raw_image", src);
namedWindow("Gray_image", CV_WINDOW_AUTOSIZE);
Mat gray;
cvtColor(src, gray, CV_BGR2HLS);
imshow("Gray_image", gray);
imwrite("HLS.png", gray);
waitKey(0);
return 0;
}
矩阵的掩膜操作
- 获取图像像素指针
- 掩膜操作解释
#include <opencv2/opencv.hpp>
#include <iostream>
#include <math.h>
using namespace cv;
using namespace std;
int main() {
Mat src, dst;
src = imread("D:/images/lena.jpg", 1);
if (!src.data) {
cout << "Image can not be loaded correctly!" << endl;
return -1;
}
namedWindow("input_image", CV_WINDOW_AUTOSIZE);
imshow("input_image", src);
dst = Mat::zeros(src.size(), src.type());
int cols = (src.cols - 1) * src.channels();
int offsetx = src.channels();
int rows = src.rows;
for(int row = 1; row < (rows - 1); row++){
const uchar* previous = src.ptr<uchar>(row-1);
const uchar* current = src.ptr<uchar>(row);
const uchar* next = src.ptr<uchar>(row+1);
uchar* output = dst.ptr<uchar>(row);
for (int col = offsetx; col < cols; col++) {
output[col] = saturate_cast<uchar>(5*current[col]-(current[col-offsetx] + current[col+offsetx] + previous[col] + next[col]));
}
}
/*
Mat kernel = (Mat_<char>(3,3)<<0,-1,0,-1,5,-1,0,-1,0);
filter2D(src, dst, src.depth(), kernel);
*/
namedWindow("Contrast_image", CV_WINDOW_AUTOSIZE);
imshow("Constrast_image", dst);
waitKey(0);
return 0;
}
Mat对象
- Mat对象与IplImage对象
- Mat对象使用
- Mat定义数组