OpenCV速成(4)——基本的图像处理(下)

0x00.本节课你将学到

0x01.使用OpenCV遍历图片的每个像素

这里其他大佬已经写的很清楚了,我就不再赘述了

大佬的文章

0x02.使用OpenCV添加噪点

所谓噪点,就是随机选择一些像素点,修改为其他颜色

代码如下

#include "opencv2/opencv.hpp"

using namespace std;
using namespace cv;

int main() 
{
	Mat lena;
	lena = imread("lena.jpg");

	int height = lena.rows, width = lena.cols;
	if (lena.isContinuous())
	{
		width = width * height * lena.channels();
		height = 1;
	}
	for (int i = 0; i < height; ++i)
	{
		uchar* pix = lena.ptr<uchar>(i);
		for (int j = 0; j < width; ++j)
		{
			if (std::rand() % 100 < 10) //选取10%
			{
				pix[j] = std::rand() % 256; //修改为随机像素
			}
		}
	}

	imshow("lena", lena);

	waitKey(0);
	return 0;
}

运行结果如下

噪点好像不是很清楚?

0x03.使用OpenCV改变图像色调

我们曾经讲过,图片为rgb3通道存储的,如果我们全局增大r的比重,或减少g和b的比重,则图片会偏红,修改图像色调便是此原理,但是注意,在OpenCV中,图像不是RGB而是BGR存储的,因此要注意获取的通道的顺序。

代码如下

#include "opencv2/opencv.hpp"

using namespace std;
using namespace cv;

int main() 
{
	Mat lena, red;
	lena = imread("lena.jpg");
    red = lena.clone(); //复制一份到red里

    int height = red.rows, width = red.cols;
    for (int i = 0; i < height; i++) 
    {
        for (int j = 0; j < width; j++)
        {
            //uchar* bc = &red.at<Vec3b>(i, j)[0]; //蓝色通道
            //uchar* gc = &red.at<Vec3b>(i, j)[1]; //绿色通道
            uchar* rc = &red.at<Vec3b>(i, j)[2]; //红色通道
            if (*rc + 100 > 255) //防止uchar越界
                *rc = 255;
            else
                *rc += 100;
        }
    }

	imshow("lena", lena);
    imshow("red", red);

	waitKey(0);
	return 0;
}

结果如下

0x04.使用OpenCV改变图片亮度

当我们等比例增加图片各个通道的值,就可以让图片变亮(实际上是变白),等比例减少就会变暗

变暗的代码如下

#include "opencv2/opencv.hpp"

using namespace std;
using namespace cv;

int main() 
{
	Mat lena, dark;
	lena = imread("lena.jpg");
	dark = lena.clone();

	int height = dark.rows, width = dark.cols;
	if (dark.isContinuous())
	{
		width = width * height * dark.channels();
		height = 1;
	}
	for (int i = 0; i < height; ++i)
	{
		uchar* pix = dark.ptr<uchar>(i);
		for (int j = 0; j < width; ++j)
		{
			pix[j] *= 0.5; //每个像素都变成原来的1/2
		}
	}

	imshow("lena", lena);
	imshow("dark", dark);

	waitKey(0);
	return 0;
}

运行结果如下

挺明显的哈
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇