读入图像:Mat src = imread("C:/1/image/sanshangyouya.jpg");
判断是否成功读入图像:
if (src.empty()) //if(!src.data()) { printf("读取错误!"); return 0; }
用opencv创建一个名为input image的窗口,窗口的大小为自动:
namedWindow("input image", CV_WINDOW_AUTOSIZE);
用input image的窗口显示读入的图片:imshow("input image", src);
cvtColor——把图象从一个色彩空间转换为另一个色彩空间:cvtColor(src, dst, CV_BGR2HLS);
保存图像:imwrite("c:/1/test.png",dst);
获得一个图像的宽:int cols = src.cols*src.channels();
//src.channels()为该图像的通道数
获得图像的高:int rows = src.rows;
初始化图像dst为大小与类型与scr相同的空白图像:dst = Mat::zeros(src.size(), src.type());
获取当前像素指针:
const uchar *current = src.ptr<uchar>(row);
current[col];//当前像素的位置
矩阵掩模操作:
#include<opencv2\opencv.hpp>
#include<iostream>
#include<math.h>
using namespace cv;
int main(int argc, char** argv)
{
Mat src, dst;
src = imread("C:/1/image/2.jpg");
if (src.empty())
{
printf("读取错误!");
return 0;
}
namedWindow("input image", CV_WINDOW_AUTOSIZE);
imshow("input image", src);
/*cvtColor(src, dst, CV_BGR2HLS);
namedWindow("output image", CV_WINDOW_AUTOSIZE);
imshow("output image", dst);*/
int cols = (src.cols-1)*src.channels();
int rows = src.rows;
int channel = src.channels();
dst = Mat::zeros(src.size(), src.type());
printf("%d %d %d", cols, rows, channel);
/*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 = 3; col <cols; col++)
{
output[col] = saturate_cast<uchar>(5 * current[col] - (current[col - channel] + current[col + channel] + 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("output image", CV_WINDOW_AUTOSIZE);
imshow("output image", dst);
waitKey(0);
return 0;
}