#include<opencv2\opencv.hpp>
#include<iostream>
using namespace cv;
using namespace std;
int main(int argc, char* argv[])
{
Mat src;
src = imread("D:/CAXA/练习/f2.jpg");
if (src.empty())
{
cout << "could read image!" << endl;
return -1;
}
namedWindow("input", CV_WINDOW_AUTOSIZE);
imshow("input", src);
Mat dst;
dst.create(src.size(), src.type());
//Mat kernel = (Mat_<char>(3, 3) << 0, -1, 0, -1, 5, -1, 0, -1, 0);
//filter2D(src, dst, src.depth(), kernel);//掩摸
//dst = Mat(src.size(), src.type());
//dst = Scalar(127, 0);
//cvtColor(src, dst, CV_BGR2GRAY);
//printf("input channels : %d\n", src.channels());
//printf("output channels : %d\n", dst.channels());
//printf("output row:%d col:%d\n", dst.rows, dst.cols);
//const uchar* firstRow = dst.ptr<uchar>(0);
//printf("output first pixel : %d\n", *firstRow);
//Mat M(100, 100, CV_8UC1, Scalar(127));
//Mat m1;
//m1.create(src.size(), src.type());
//m1 = Scalar(0, 0, 255);
int height = src.rows;
int width = src.cols;
int nc = src.channels();
for (int i = 0; i < height; i++)
{
for (int j = 0; j < width; j++)
{
if (nc == 1) {
int gray = dst.at<uchar>(i, j);
dst.at<uchar>(i, j) = 255 - gray;
}
else if (nc == 3)
{
int b = src.at<Vec3b>(i, j)[0];
int g = src.at<Vec3b>(i, j)[1];
int r = src.at<Vec3b>(i, j)[2];
src.at<Vec3b>(i, j)[0] = 255 - b;
src.at<Vec3b>(i, j)[1] = 255 - g;
src.at<Vec3b>(i, j)[2] = 255 - r;
}
}
}
//bitwise_not(src, dst);//对图像每个像素取反 和上面等价
imshow("output", src);
waitKey(0);
}