1、Mat对象初始化
#include<opencv2/opencv.hpp>
#include<iostream>
using namespace std;
using namespace cv;
int main()
{
Mat srcImg = imread("C:/Users/admin/Desktop/1.JPG");
if (!srcImg.data)
{
printf("未找到图像");
return -1;
}
namedWindow("srcImage Window", CV_WINDOW_AUTOSIZE);
imshow("srcImage Window", srcImg);
Mat csrc;
Mat kernel = (Mat_<float>(3, 3) << 0, -1, 0, -1, 5, -1, 0, -1, 0);
filter2D(srcImg, csrc, -1, kernel);
namedWindow("csrcImage Window", CV_WINDOW_AUTOSIZE);
imshow("csrcImage Window", csrc);
/*Mat dst;
dst=Mat(srcImg.size(), srcImg.type());//大小、类型
dst = Scalar(127, 0, 255);//3个通道*/
//Mat dst = srcImg.clone();//完全copy
Mat dst;
//srcImg.copyTo(dst);
cvtColor(srcImg, dst, CV_BGR2GRAY);
printf("dst通道数:%d\n",dst.channels());
printf("srcImg通道数:%d", srcImg.channels());
int cols = dst.cols;//列
int rows = dst.rows;//行
int channels = dst.channels();//通道数
const uchar* pFirstRow = dst.ptr<uchar>(0);
printf("first image value:%d", *pFirstRow);
//定义一个3*3像素集合 8bit uc:uchar 3:3通道 BGR:(0,0,255)红色 Scalar 向量长度与通道数一致
Mat M(3, 3, CV_8UC3, Scalar(0, 0, 255));//作用:验证算法正确性
//cout << "M=" << endl << M << endl;
//创建Mat对象2
Mat M1;
M1.create(srcImg.size(), srcImg.type());
M1 = Scalar(0,0,255);
Mat m2 = Mat::zeros(srcImg.size(), srcImg.type());//与输出图像大小一致,
Mat m3 = Mat::zeros(2, 2, CV_8UC1);//
Mat m4 = Mat::eye(2, 2, CV_8UC1);
waitKey(0);
}
2、图像像素读写
#include<opencv2/opencv.hpp>
#include<iostream>
#include<math.h>
using namespace std;
using namespace cv;
int main()
{
Mat dst_gray;
Mat srcImg = imread("C:/Users/admin/Desktop/1.JPG");
if (!srcImg.data)
{
printf("未找到图像");
return -1;
}
namedWindow("srcImage Window", CV_WINDOW_AUTOSIZE);
imshow("srcImage Window", srcImg);
cvtColor(srcImg, dst_gray, CV_BGR2GRAY);
namedWindow("dst_grayImage Window", CV_WINDOW_AUTOSIZE);
imshow("dst_grayImage Window", dst_gray);
int hight = dst_gray.rows;
int width = dst_gray.cols;
//读写像素
//
for (int i = 0; i < hight; i++)
{
for (int j = 0; j < width; j++)
{
int gray = dst_gray.at<uchar>(i,j);
dst_gray.at<uchar>(i, j) = 255 - gray;//只适用于单通道
//cout << gray << endl;
}
}
Mat dst;
dst.create(srcImg.size(), srcImg.type());
hight = dst.rows;
width = dst.cols;
int nc = dst.channels();
//bitwise_not(srcImg,dst);
//bitwise_not(src,dst) 函数的实现
for (int rows = 0; rows < hight; rows++)
{
for (int cols = 0; cols < width; cols++)
{
if (nc==1)
{
int gray = dst_gray.at<uchar>(rows, cols);
dst_gray.at<uchar>(rows, cols) = 255 - gray;
}
else if (nc==3)
{
int b = srcImg.at<Vec3b>(rows, cols)[0];
int g = srcImg.at<Vec3b>(rows, cols)[1];
int r = srcImg.at<Vec3b>(rows, cols)[2];
dst.at<Vec3b>(rows, cols)[0] = 255 - b;
dst.at<Vec3b>(rows, cols)[1] =255-g;
dst.at<Vec3b>(rows, cols)[2] =255-r;
dst_gray.at<uchar>(rows, cols) = min(r, min(b, g));
}
}
}
namedWindow("dst11_grayImage Window", CV_WINDOW_AUTOSIZE);
imshow("dst11_grayImage Window", dst);
namedWindow("dst1_grayImage Window", CV_WINDOW_AUTOSIZE);
imshow("dst1_grayImage Window", dst_gray);
waitKey(0);
}