图像反转-灰度化-c++底层实现-opencv

彩色图像直接灰度化+底层灰度化实现

#include<iostream>
#include<math.h>
using namespace std;
using namespace cv;
int main(int argc, char** argv)
{
	Mat gray,dst;
	Mat src = imread("22.jpg");
	namedWindow("Window Title", WINDOW_NORMAL);
	if (src.empty())
	{
		cout << "picture is empty" << endl;
	}
	else
	{
		cvtColor(src,gray,COLOR_BGR2GRAY); //直接灰度化
		dst = Mat(src.size(), src.type());//创建图像
		
        //底层灰度化
		int width = src.cols;
		int height = src.rows;
		int channs = src.channels();
		for (int row = 0; row < height; row++)
		{
			for (int col = 0; col < width; col++)
			{
				int b = src.at<Vec3b>(row, col)[0];//获取三通道每个像素点的值
				int g = src.at<Vec3b>(row, col)[1];
				int r = src.at<Vec3b>(row, col)[2];
				dst.at<uchar>(row, col) = max(r,max(b,g));//取三个通道中的最大值
			}
		}
		namedWindow("q",WINDOW_AUTOSIZE);
		imshow("Window Title", gray);
		imshow("q", dst);
	}
	
	waitKey(0);
	return 0;
}

图像直接反转+底层实现

#include<opencv2\opencv.hpp>
#include<highgui.h>
#include<iostream>
#include<math.h>
using namespace std;
using namespace cv;
int main(int argc, char** argv)
{
	Mat gray,dst1,dst2;
	Mat src = imread("22.jpg");
	namedWindow("Window Title", WINDOW_NORMAL);
	if (src.empty())
	{
		cout << "picture is empty" << endl;
	}
	else
	{
		cvtColor(src,gray,COLOR_BGR2GRAY);
		dst1 = Mat(src.size(), src.type());//创建图像
        dst2 = Mat(gray.size(), gray.type());
        
        //灰度图像反转
		int width= gray.cols;
		int height = gray.rows;
		for (int row = 0; row < height; row++)
		{
			for (int col = 0; col < width; col++)
			{
				int grays = gray.at<uchar>(row, col);
				dst1.at<uchar>(row, col) = 255 - grays;
			
			}
		}

        //彩色图像反转
		int width = src.cols;
		int height = src.rows;
		int channs = src.channels();
		for (int row = 0; row < height; row++)
		{
			for (int col = 0; col < width; col++)
			{
				int b = src.at<Vec3b>(row, col)[0];//获取三通道每个像素点的值
				int g = src.at<Vec3b>(row, col)[1];
				int r = src.at<Vec3b>(row, col)[2];
				dst2.at<Vec3b>(row, col)[0] = 255 - b;
				dst2.at<Vec3b>(row, col)[1] = 255 - g;
				dst2.at<Vec3b>(row, col)[2] = 255 - r;
			}
		}
		//bitwise_not(src, dst2);//直接反转图像
		namedWindow("q",WINDOW_AUTOSIZE);
		imshow("Window Title", dst1);
		imshow("q", dst2);
	}
	
	waitKey(0);
	return 0;
}

如有帮组,请点赞,谢谢

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

猪猪派对

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值