前言
今天是opencv刚入门不久,学习起来更是摸不着头脑。想使用图片做个卷积运算,但是却不知道像素点的存储原理是怎么样的。最后自己写程序自己调试出来。最后总结一下自己的心得。
一、像素点存储方式
像素采用RGB方式存储,经过代码测试发现一个像素点(蓝,绿,红)。
代码如下(示例):
#include <iostream>
#include <opencv2/core/core.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/highgui/highgui.hpp>
using namespace cv;
using namespace std;
int main()
{
Mat img = Mat::zeros(10, 10, CV_8UC(3)); //自定义一张图片,初始像素值为0
namedWindow("原图", WINDOW_NORMAL);
cout<< "img = " << img << endl;
imshow("原图", img);
Mat dst = Mat::zeros(img.size(), img.type()); //初始化目标图片,图片大小和类型和原图的一样
uchar * output = dst.ptr<uchar>(); //定义指针操作图片像素
//注释坐标从“1”开始(注意不是“0”)
output[0] = 255; //操作第1行第1列(1,1)的像素点的蓝色通道
output[1 + dst.cols*dst.channels()] = 255;//操作第2行第1列(2,1)的像素点的绿色通道
output[2 + 2*dst.cols*dst.channels()] = 255;//操作第3行第1列(3,1)的像素点的红色通道
output[3*dst.cols*dst.channels()] = 255;//操作第4行第1列(4,1)的像素点的蓝色通道
output[1 + 3*dst.cols*dst.channels()] = 255;//操作第4行第1列(4,1)的像素点的绿色通道
output[2 + 3*dst.cols*dst.channels()] = 255;//操作第4行第1列(4,1)的像素点的红色通道
namedWindow("变化后图", WINDOW_NORMAL);
cout<< "dst = " << dst << endl;
imshow("变化后图", dst);
waitKey(0);
return 0;
}
代码运行结果:
img:
dst:
总结
如果有错误的话,欢迎大家指出。