目录
1.Mat对象
1.1Mat对象使用的四个要点
1.2生成一个大小和类型和输入图像一直的图像
1.3克隆
1.4像素指针
2.读写像素
#include
#include
#include"MyAPI.h"
using namespace std;
using namespace cv;
int main()
{
Mat src, dst;
src = imread("D:\\testImage\\123.bmp");
if (!src.data)
{
cout << "could not load Image...";
return -1;
}
namedWindow("input image", WINDOW_AUTOSIZE);
imshow("input image", src);
dst = Mat(src.size(), src.type());//生成一个Mat对象
dst = Scalar(127, 0, 255);//对Mat对象上色
namedWindow("output", WINDOW_AUTOSIZE);
imshow("output", dst);
//MyApi ma;
//ma.filter2DAPI(src);
waitKey(0);
return 0;
}
克隆是完全的数据拷贝。调用如下:
Mat dst = src.clone();
或者利用src.copyTo(dst)生成一个和src一样的图像
例如我们想输出图像的第一个像素值
const uchar* firstRow = dst.ptr(0);
cout<<"first pixel value:%d"<<*firstRow
Vec3f intensity = img.at(y,x);
float blue = intensity.val[0];
float green = intensity.val[1];
flaot red = intensity.val[2];
案例分析:(灰度图和RGB图图像反差)
void MyApi::travel_image_pixel_and_reverse(Mat& image)
{
Mat dst;
//遍历灰度图的并像素反转
cvtColor(image, dst, COLOR_BGR2GRAY);
namedWindow("gray_image", WINDOW_AUTOSIZE);
imshow("gray_image", dst);
int height = dst.rows;
int width = dst.cols;
for (int row = 0; row < height; row++)
{
for (int col = 0; col < width; col++)
{
int gray = dst.at(row, col);//遍历的是整个图片的像素值
dst.at(row, col) = 255 - gray;//将像素反转
}
}
imshow("gray_reverse", dst);
}
分别是原图灰度图和反差图
RGB图的反转
void MyApi::travel_image_pixel_and_reverse(Mat& image)
{
Mat dst;
dst.create(image.size(), image.type());
int height = image.rows;
int width = image.cols;
int nc = image.channels();
for (int row = 0; row < height; row++)
{
for (int col = 0; col < width; col++)
{
if (nc == 1)//灰度图
{
int gray = dst.at(row, col);//遍历的是整个图片的像素值
dst.at(row, col) = 255 - gray;//将像素反转
}else if (nc == 3)
{
int b = image.at(row, col)[0];
int g = image.at(row, col)[1];
int r = image.at(row, col)[2];
//像素反差
dst.at(row, col)[0] = 255 - b;
dst.at(row, col)[1] = 255 - g;
dst.at(row, col) [2]= 255 - r;
}
}
}
imshow("reverse_output", dst);
}
对于图像的反差我们也可以直接调用API
bitwise_not(src,dst)