04 Opencv图像操作

news2024/11/18 23:47:29

文章目录

  • 读写像素
  • 修改像素值
  • Vec3b与Vec3F
  • 灰度图像增强
  • 获取图像通道
  • bitwise_not 算子对图像非操作

读写像素

  • 读一个GRAY像素点的像素值(CV_8UC1) Scalar intensity = img.at(y, x); 或者 Scalar intensity = img.at(Point(x, y));

  • 读一个RGB像素点的像素值 Vec3f intensity = img.at(y, x); float blue = intensity.val[0]; float green = intensity.val[1]; float red =
    intensity.val[2];

修改像素值

  • 灰度图像 img.at(y, x) = 128;

  • RGB三通道图像 img.at(y,x)[0]=128; // blue img.at(y,x)[1]=128; // green img.at(y,x)[2]=128; // red

  • 空白图像赋值 img = Scalar(0);

  • ROI选择 Rect r(10, 10, 100, 100); Mat smallImg = img®;

Vec3b与Vec3F

  • Vec3b对应三通道的顺序是blue、green、red的uchar类型数据。
  • Vec3f对应三通道的float类型数据
  • 把CV_8UC1转换到CV32F1实现如: src.convertTo(dst, CV_32F);

灰度图像增强

可以用增强图像加钱图像的辨析度

#include <iostream>
#include <opencv2/opencv.hpp>
using namespace std;
using namespace cv;
int main()
{
	Mat src = imread("test.jpg");//读取图片
	if (src.empty())
	{
		cout << "could not load img...";
		return -1;
	}
	namedWindow("test");//设置窗口名称
	imshow("test", src);

	//灰度图像反转
	Mat gray_image;
	cvtColor(src, gray_image, COLOR_BGR2GRAY);// 转换为灰度图

	namedWindow("invert gray");
	imshow("invert gray", gray_image);
	int width = gray_image.cols;//获取图像的宽高
	int high = gray_image.rows;
	for (int i = 0; i < high; i++)
	{
		for (int j = 0; j < width; j++)
		{
			int gray = gray_image.at<uchar>(i, j);//获取行列坐标点
			gray_image.at<uchar>(i, j) = 255 - gray;//图像反转
		}
	}
	
	namedWindow("invert gray");
	imshow("invert gray", gray_image);
	
	
	waitKey(0);
	return 0;
}

在这里插入图片描述

获取图像通道

#include <iostream>
#include <opencv2/opencv.hpp>
using namespace std;
using namespace cv;
int main()
{
	Mat src = imread("test.jpg");//读取图片
	if (src.empty())
	{
		cout << "could not load img...";
		return -1;
	}
	namedWindow("test");//设置窗口名称
	imshow("test", src);

	//灰度图像反转
	Mat gray_image;
	cvtColor(src, gray_image, COLOR_BGR2GRAY);// 转换为灰度图
	//namedWindow("invert gray");
	//imshow("invert gray", gray_image);
	int width = gray_image.cols;//获取图像的宽高
	int high = gray_image.rows;
	int nc = src.channels();//获取通道值
	Mat dst;
	dst.create(src.size(), src.type());
	for (int row = 0; row < high; row++)
	{
		for (int col = 0; col < width; col++)
		{
			if (nc == 1)//单通道
			{
				int gray = gray_image.at<uchar>(row, col);//获取行列坐标点
				gray_image.at<uchar>(row, col) = 255 - gray;//图像反转
			}
			else if (nc == 3)
			{
				
				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<Vec3b>(row, col)[0] = b;
				dst.at<Vec3b>(row, col)[1] = g;
				dst.at<Vec3b>(row, col)[2] = r;//调整bgr参数获取想要的效果
				gray_image.at<uchar>(row, col) = min(r, min(b, g));//获取rgb的最小值
			}
			
		}
	}
	//namedWindow("invert gray");
	//imshow("invert gray", gray_image);
	imshow("三色通道", dst);
	waitKey(0);
	return 0;
}

在这里插入图片描述

bitwise_not 算子对图像非操作

#include <iostream>
#include <opencv2/opencv.hpp>
using namespace std;
using namespace cv;
int main()
{
	Mat src = imread("test.jpg");//读取图片
	if (src.empty())
	{
		cout << "could not load img...";
		return -1;
	}
	namedWindow("test");//设置窗口名称
	imshow("test", src);

	//灰度图像反转
	Mat gray_image;
	cvtColor(src, gray_image, COLOR_BGR2GRAY);// 转换为灰度图
	//namedWindow("invert gray");
	//imshow("invert gray", gray_image);
	int width = gray_image.cols;//获取图像的宽高
	int high = gray_image.rows;
	int nc = src.channels();//获取通道值
	Mat dst;
	dst.create(src.size(), src.type());
	//for (int row = 0; row < high; row++)
	//{
	//	for (int col = 0; col < width; col++)
	//	{
	//		if (nc == 1)//单通道
	//		{
	//			int gray = gray_image.at<uchar>(row, col);//获取行列坐标点
	//			gray_image.at<uchar>(row, col) = 255 - gray;//图像反转
	//		}
	//		else if (nc == 3)
	//		{
	//			
	//			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<Vec3b>(row, col)[0] = b;
	//			dst.at<Vec3b>(row, col)[1] = g;
	//			dst.at<Vec3b>(row, col)[2] = 0;//调整bgr参数获取想要的效果
	//			gray_image.at<uchar>(row, col) = min(r, min(b, g));//获取rgb的最小值
	//		}
	//		
	//	}
	//}
	bitwise_not(src, dst);
	//namedWindow("invert gray");
	//imshow("invert gray", gray_image);
	imshow("三色通道", dst);
	waitKey(0);
	return 0;
}

在这里插入图片描述

#include <iostream>
#include <opencv2/opencv.hpp>
using namespace std;
using namespace cv;
int main()
{
	Mat src = imread("test.jpg");//读取图片
	if (src.empty())
	{
		cout << "could not load img...";
		return -1;
	}
	namedWindow("test");//设置窗口名称
	imshow("test", src);

	//灰度图像反转
	Mat gray_image;
	cvtColor(src, gray_image, COLOR_BGR2GRAY);// 转换为灰度图
	//namedWindow("invert gray");
	//imshow("invert gray", gray_image);
	int width = gray_image.cols;//获取图像的宽高
	int high = gray_image.rows;
	int nc = src.channels();//获取通道值
	Mat dst;
	dst.create(src.size(), src.type());
	for (int row = 0; row < high; row++)
	{
		for (int col = 0; col < width; col++)
		{
			if (nc == 1)//单通道
			{
				int gray = gray_image.at<uchar>(row, col);//获取行列坐标点
				gray_image.at<uchar>(row, col) = 255 - gray;//图像反转
			}
			else if (nc == 3)
			{
				
				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<Vec3b>(row, col)[0] = 255-b;
				dst.at<Vec3b>(row, col)[1] = 255-g;
				dst.at<Vec3b>(row, col)[2] = 255-r;//调整bgr参数获取想要的效果
				//gray_image.at<uchar>(row, col) = min(r, min(b, g));//获取rgb的最小值
			}
			
		}
	}
	//bitwise_not(src, dst);
	//namedWindow("invert gray");
	//imshow("invert gray", gray_image);
	imshow("三色通道", dst);
	waitKey(0);
	return 0;
}

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1478908.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java图书管理系统---命令行

项目列表 Book包 Book类内包含book的基本属性 BookList类初始化图书列表并且提供图书的属性方法 User包 Administrator类 common类 operator包 功能接口 新增图书功能 借阅图书功能 删除图书功能 显示图书功能 查找图书功能 归还图书功能 结束释放资源功能 运行…

排序(1)

目录 1 排序的概念及其应用 1.1 排序的概念 1.2 排序的应用 1.3 常见的排序算法 2 直接插入排序 2.1 基本思想 2.2 基本思路 2.3 代码实现 2.4 时间复杂度 3 冒泡排序&#xff08;回顾&#xff09; 3.1 思路分析 3.2 时间复杂度 4 比较 1 排序的概念及其应用 1.…

[分类指标]准确率、精确率、召回率、F1值、ROC和AUC、MCC马修相关系数

准确率、精确率、召回率、F1值 定义&#xff1a; 1、准确率&#xff08;Accuracy&#xff09; 准确率是指分类正确的样本占总样本个数的比例。准确率是针对所有样本的统计量。它被定义为&#xff1a; 准确率能够清晰的判断我们模型的表现&#xff0c;但有一个严重的缺陷&…

双指针问题(Java编写)

日升时奋斗&#xff0c;日落时自省 目录 一、移动零 二、盛水最多的容器 三、快乐数 四、复写零 五、三数之和 六、有效三角形的个数 七、四数之和 一、移动零 题目来源&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 题目主要内容就是将数组中所有的零移动到…

解决VSCode 不能拖拽文件问题

给【以管理员身份运行次程序】关掉&#xff0c;不要打勾 至于为什么开启了管理员就不能拖拽了&#xff0c;我也不知道&#xff0c;我猜的&#xff1a; 这可能是因为在VSCode中&#xff0c;管理员权限可能会限制用户对文件的操作权限。管理员权限对于一些操作可能会有更严格的限…

【Vue3】全局组件,递归组件,动态组件,传送组件,缓存组件,异步组件等

组件使用 父子组件传参父传子模板上直接使用js里面使用ts组件里面泛型接收ts泛型里面设置默认值 子传父方式一&#xff0c;采用defineEmits方式二&#xff0c;采用ts的泛型 方式三&#xff0c;采用ref获取子组件内部暴露的数据和方法子组件先暴露父组件接收 全局组件发现有报错…

云原生精品资料合集(附下载)

云计算是产业数字化转型的关键基础设施,以基础设施资源为中心的云搬迁时代接近尾声&#xff0c;以应用价值为中心的云原生时代已经到&#xff0c;所以IT人员学习云原生正当时&#xff01;最近跟各位大神征集了云原生的教程&#xff0c;行业报告和最佳实践&#xff0c;总有一款适…

【软考】UML中的图之通信图

目录 1. 说明2. 图示3. 特性4. 例题4.1 例题1 1. 说明 1.通信图强调收发消息的对象的结构组织2.早期版本叫做协作图3.通信图强调参加交互的对象和组织4.首先将参加交互的对象作为图的顶点&#xff0c;然后把连接这些对象的链表示为图的弧&#xff0c;最后用对象发送和接收的消…

『Linux从入门到精通』第 ㉑ 期 - 文件系统详解

文章目录 &#x1f490;专栏导读&#x1f490;文章导读&#x1f427;认识磁盘&#x1f427;逻辑抽象&#x1f427;文件系统&#x1f426;Block&#x1f426;Block Group&#x1f414;Block Group 的组成部分 &#x1f426;Superblock(超级区块)&#x1f426;Group Description(…

FRM模型十二:极值理论

目录 极值理论介绍GEVPOT 代码实现 极值理论介绍 在风险管理中&#xff0c;将事件分为高频高损、高频低损、低频高损、低频低损。其中低频高损是一种非常棘手的损失事件&#xff0c;常出现在市场大跌、金融体系崩溃、金融危机以及自然灾害等事件中。 由于很难给极端事件一个准…

如何解决局域网tcp延迟高来进行安全快速内外网传输呢?

在当今企业运营中&#xff0c;数据的快速流通变得至关重要&#xff0c;但局域网内的TCP延迟问题却成为了数据传输的障碍。本文旨在分析局域网TCP延迟的成因&#xff0c;并探讨几种企业数据传输的常见模式&#xff0c;以及如何为企业选择合适的传输策略&#xff0c;以确保数据在…

简单求和计算器

其实对于计算器的写法在C语言阶段就已经有了&#xff0c;但是&#xff0c;在目前阶段《前后端交互》&#xff0c;这算是一种全新的写法&#xff0c;毕竟将数据从前端返回给后端&#xff0c;然后再将数据返回给前端&#xff0c;都涉及到一些参数的交互&#xff0c;值得我们学习深…

[CISCN2019 华北赛区 Day2 Web1]Hack World 1 题目分析与详解

一、分析判断 进入靶机&#xff0c;主页面如图&#xff1a; 主页面提供给我们一条关键信息&#xff1a; flag值在 表flag 中的 flag列 中。 接着我们尝试输入不同的id&#xff0c;情况分别如图&#xff1a; 当id1时&#xff1a; 当id2时&#xff1a; 当id3时&#xff1a; 我…

博弈论---Nim游戏(公平组合游戏,概念,证明异或为0就是必败态,示例)

目录 概念&#xff1a; 公平组合游戏ICG 有向图游戏 Nim游戏 先手&#xff09;必胜状态 先手&#xff09;必败状态 如何确定先手是否必胜或者必败&#xff08;都采用最优策略&#xff09; 证明&#xff1a;全部异或为0则是必败状态 综上&#xff1a; 例子 概念&#…

OJ_二叉树已知先序遍历序列(有空叶子)求中序遍历序列

题干 C实现 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<vector> using namespace std;struct TreeNode {char data;TreeNode* left;TreeNode* right; };TreeNode* RecursiveBuildTree(int& i, char str[]) {char c str[i];i;if (c #) {re…

红队基础设施建设

文章目录 一、ATT&CK二、T1583 获取基础架构2.1 匿名网络2.2 专用设备2.3 渗透测试虚拟机 三、T1588.002 C23.1 开源/商用 C23.1.1 C2 调研SliverSliver 对比 CS 3.1.2 CS Beacon流量分析流量规避免杀上线 3.1.3 C2 魔改3.1.4 C2 隐匿3.1.5 C2 准入应用场景安装配置说明工具…

【开源】JAVA+Vue.js实现桃花峪滑雪场租赁系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 游客服务2.2 雪场管理 三、数据库设计3.1 教练表3.2 教练聘请表3.3 押金规则表3.4 器材表3.5 滑雪场表3.7 售票表3.8 器材损坏表 四、系统展示五、核心代码5.1 查询教练5.2 教练聘请5.3 查询滑雪场5.4 滑雪场预定5.5 新…

掌握Python操作Word:从基础到高级全覆盖

掌握Python操作Word&#xff1a;从基础到高级全覆盖 引言Python操作Word的基础文档的创建与打开文档的基本操作 创建和打开Word文档创建新的Word文档打开现有文档读取文档内容修改现有文档 编辑文档内容添加和编辑文本设置格式插入标题 处理文档结构操作段落列表的处理表格的操…

Linux Shell脚本练习(三)

1、测试用户名与密码是否正确。 2、输出1-1000内的素数。 3、对 100 以内的所有正整数相加求和(1234...100)。 4、输出9*9 乘法表。 5、编写脚本,显示进度条。 、 6、输入三个数并进行升序排序

Linux-nginx服务

一.Nginx概述 1.定义 一款高新能、轻量级Web服务软件 系统资源消耗低 对HTTP并发连接的处理能力高 单台物理服务器可支持30 000&#xff5e;50 000个并发请求。 2.Nginx模块作用 &#xff08;1&#xff09;main模块 全局配置模块&#xff0c;所有模块都要执行遵守&#xf…