Opencv 实战学习总结一
加载图像并显示
Mat image = imread("1.jpg");
namedWindow("img3");
imshow("img3", gray);
waitKey(0);
最简单的加载图面并显示图片 waitKey(0) 是刷新显示并提供事件循环。
图像转换 opencv转换灰度图 并保存到图像
Mat image = imread("1.jpg");
namedWindow("img");
imshow("img", image);
Mat gray;
cvtColor(image, gray, COLOR_BGR2GRAY);
imwrite("q.jpg",gray);//保存
namedWindow("img3");
imshow("img3", gray);
waitKey(0);
cvtColor()函数为图像转换函数
imwrite() 函数为保存图片函数
Mat对象构造函数与常用方法
Mat 的遍历
Mat mat(3000, 4000, CV_8UC3);
//image.create(rosws,cols,cv_8uc3);
int es = mat.elemSize();
int size = mat.rows * mat.cols * es;
printms();
for (int i = 0; i < size;i += es) {
mat.data[i] = 255;//B
mat.data[i + 1] = 100;//G
mat.data[i + 2] = 100;//R
}
printms("mat.data.ms");
for (int i = 0; i < mat.rows;i++) {
for (int j = 0; j < mat.cols;j++) {
(&mat.data[i * mat.step])[j * 3] = 255;
(&mat.data[i * mat.step])[j * 3+1] = 255;
(&mat.data[i * mat.step])[j * 3+2] = 255;
}
}
printms("mat.nodata.ms");
for (int i = 0; i < mat.rows; i++) {
for (int j = 0; j < mat.cols; j++) {
auto var = mat.ptr<Vec3b>(i,j);
var->val[0] = 0;
var->val[1] = 255;
var->val[2] = 255;
}
}
printms("mat.ptr.ms");
for (int i = 0; i < mat.rows; i++) {
for (int j = 0; j < mat.cols; j++) {
mat.at<Vec3b>(i, j)[0] = 255;
mat.at<Vec3b>(i, j)[1] = 0;
mat.at<Vec3b>(i, j)[2] = 255;
auto &mm = mat.at<Vec3b>(i, j); //引用 减少对象复制开销
mm[0] = 255;
mm[1] = 0;
mm[2] = 255;
}
}
//迭代器 效率比上面稍慢
printms("mat.at.ms");
auto itstr = mat.begin<Vec3b>();
auto itend = mat.end<Vec3b>();
for (; itstr != itend;itstr ++) {
(*itstr).val[0] = 0;
(*itstr).val[1] = 255;
(*itstr).val[2] = 0;
}
printms("mat.begin.ms");
namedWindow("mat");
imshow("mat",mat);
waitKey(0);