(7)opencv图片内部的基本处理

就是,给定我们一张图片,我们可以对图片的每一个像素的色彩进行处理

比如,我们的原图是这个样子

然后我首先将他变成灰度图(灰度图的行道是1,就是chanaual是1)

然后,我又将灰色图片的黑白进行颠倒

涉及的代码如下:

 1 #include<iostream>
 2 #include<opencv.hpp>
 3 
 4 using namespace std;
 5 using namespace cv;
 6 
 7 int main()
 8 {
 9 
10     Mat sou;
11     sou = imread("C:\Users\32829\Desktop\aa.jpg");
12     if (sou.empty())
13     {
14         cout << "图像读入失败" << endl;
15     }
16     namedWindow("new");
17     imshow("new", sou);
18 
19     Mat dst;
20     //将原图改为灰度图,就是改变原图的色系
21     cvtColor(sou, dst, CV_BGR2GRAY);
22     namedWindow("old1");
23     imshow("old1", dst);
24 
25     int height = dst.rows;//获取目标图的高度
26     int weight = dst.cols;//获取目标图的宽度
27 
28     for (int row = 0; row < height; row++)
29     {
30         for (int col = 0; col < weight; col++)
31         {
32             int grey = dst.at<uchar>(row, col);//获取图片的每一个像素点
33             dst.at<uchar>(row, col) = 255 - grey;//将像素点变成他的补
34         }
35     }
36     namedWindow("old2");
37     imshow("old2", dst);
38 
39 
40     waitKey(0);
41     return 1;
42 }

上面是一通道的图片修改,下面是三通道的修改

原图和修改后的图片展示

 1 #include<iostream>
 2 #include<opencv.hpp>
 3 
 4 using namespace std;
 5 using namespace cv;
 6 
 7 int main()
 8 {
 9 
10     Mat sou;
11     sou = imread("C:\Users\32829\Desktop\aa.jpg");
12     if (sou.empty())
13     {
14         cout << "图像读入失败" << endl;
15     }
16     namedWindow("new");
17     imshow("new", sou);
18 
19     Mat dst;
20     ////将原图改为灰度图,就是改变原图的色系
21     //cvtColor(sou, dst, CV_BGR2GRAY);
22     //namedWindow("old1");
23     //imshow("old1", dst);
24 
25     //int height = dst.rows;//获取目标图的高度
26     //int weight = dst.cols;//获取目标图的宽度
27 
28     //for (int row = 0; row < height; row++)
29     //{
30     //    for (int col = 0; col < weight; col++)
31     //    {
32     //        int grey = dst.at<uchar>(row, col);//获取图片的每一个像素点
33     //        dst.at<uchar>(row, col) = 255 - grey;//将像素点变成他的补
34     //    }
35     //}
36     //namedWindow("old2");
37     //imshow("old2", dst);
38 
39     dst.create(sou.size(), sou.type());
40     namedWindow("old2");
41     imshow("old2", dst);
42     int height = dst.rows;//获取目标图的高度
43     int weight = dst.cols;//获取目标图的宽度
44     int chan = dst.channels();
45 
46     for (int row = 0; row < height; row++)
47     {
48         for (int col = 0; col < weight; col++)
49         {
50             if (chan == 1)
51             {
52                 int grey = dst.at<uchar>(row, col);//获取图片的每一个像素点
53                 dst.at<uchar>(row, col) = 255 - grey;//将像素点变成他的补
54             }
55             else if (chan==3){
56                 int b=sou.at<Vec3b>(row,col)[0];//获取他的这个像素点的第一个值
57                 int g = sou.at<Vec3b>(row, col)[1];//获取他的这个像素点的第二个值
58                 int r = sou.at<Vec3b>(row, col)[2];//获取他的这个像素点的第三个值
59                 //下面是修改像素值;
60                 dst.at<Vec3b>(row, col)[0] = 255 - b;
61                 dst.at<Vec3b>(row, col)[1] = 255 - g;
62                 dst.at<Vec3b>(row, col)[2] = 255 - r;
63             }
64         }
65     }
66 
67     namedWindow("old4");
68     imshow("old4", dst);
69 
70 
71     waitKey(0);
72     return 1;
73 }

还有一个简单的方法:

然后代码就是将上面的for循环给删了

 1 #include<iostream>
 2 #include<opencv.hpp>
 3 
 4 using namespace std;
 5 using namespace cv;
 6 
 7 int main()
 8 {
 9 
10     Mat sou;
11     sou = imread("C:\Users\32829\Desktop\aa.jpg");
12     if (sou.empty())
13     {
14         cout << "图像读入失败" << endl;
15     }
16     namedWindow("new");
17     imshow("new", sou);
18 
19     Mat dst;
20 
21     
22 
23     dst.create(sou.size(), sou.type());
24     namedWindow("old2");
25     imshow("old2", dst);
26     int height = dst.rows;//获取目标图的高度
27     int weight = dst.cols;//获取目标图的宽度
28     int chan = dst.channels();
29 
30 /////////////////////////////////////////////////////////就加了这一行
31     
32     bitwise_not(sou, dst);
33 
34 ////////////////////////////////////////////////////////////////////
35     namedWindow("old4");
36     imshow("old4", dst);
37 
38 
39     waitKey(0);
40     return 1;
41 }

基础知识整理:

====================================================================

============================================================================

=============================================================================

 ===========================================================================

原文地址:https://www.cnblogs.com/xiaoyoucai/p/10179376.html