首页 > 其他分享 >Day1

Day1

时间:2023-04-13 23:14:30浏览次数:23  
标签:Mat int image Day1 current col row

Opencv学习笔记

Day1

图像读取与显示

#include<bits/stdc++.h>
#include<opencv2/opencv.hpp>
using namespace std;
using namespace cv;
int main(int argc,char** argv)
{
	Mat a = imread("E:/壁纸/5.jpg");
    //创建一个Windows窗口
	namedWindow("输入窗口", WINDOW_FREERATIO);
    //显示图像
	imshow("输入窗口", a);
    //持续10000ms
	waitKey(10000);
    //关闭所有窗口
	destroyAllWindows();
}

图像色彩空间转换

头文件

#pragma once
#include<opencv2/opencv.hpp>
using namespace cv;
class QuickDemo {
public:
	void colorSpace_Demo(Mat &image);
};

源文件

#include<bits/stdc++.h>
#include<QuickDemo.h>
void QuickDemo::colorSpace_Demo(Mat& image)
{
	Mat gray, hsv;
	cvtColor(image, hsv, COLOR_BGR2HSV);      //转换色彩空间
	cvtColor(image, gray, COLOR_BGR2GRAY);
	imshow("HSV", hsv);
	imshow("灰度", gray);
	imwrite("E:/hsv.png", hsv);
	imwrite("E:/gray.png", gray);
}
#include<bits/stdc++.h>
#include<opencv2/opencv.hpp>
#include<QuickDemo.h>
using namespace std;
using namespace cv;
int main(int argc,char** argv)
{
	Mat a = imread("E:/壁纸/5.jpg");
	namedWindow("输入窗口", WINDOW_FREERATIO);
	imshow("输入窗口", a);
	QuickDemo qd;
	qd.colorSpace_Demo(a);
	waitKey(10000);
	destroyAllWindows();
}

图像对象的创建与赋值

void QuickDemo::mat_creation_demo(Mat& image)
{
	Mat m1, m2;
	m1 = image.clone();    //克隆
	image.copyTo(m2);      //拷贝

	//创建图像
	// 
	//创建一个全是0的8*8的8位的ugsined无符号的单通道的图像
	Mat m3 = Mat::zeros(Size(8, 8), CV_8UC1);

	//输出m3图像
	std::cout << m3 << std::endl;

	//创建一个50*50 8位的ugsined无符号的三通道的图像 每三个数表示一个像素
	Mat m4 = Mat::zeros(Size(50, 50), CV_8UC3);

	//输出m4的宽度 高度 通道数
	std::cout << "width:" << m4.cols << "height:" << m4.rows << "channels:" << m4.channels() << std::endl;

	//创建一个全是1的图像  之能用于单通道
	Mat m5 = Mat::ones(Size(8, 8), CV_8UC1);
	std::cout << m5 << std::endl;

	//第一通道全部赋值127
	m5 = 127;
	std::cout << m5 << std::endl;

	//三个通道分别赋值255 0 0
	m4 = Scalar(255, 0, 0);
	std::cout << m4 << std::endl;

	//显示图像
	//imshow("创建图像", m4);

	//改变m6颜色 m4颜色也改变
	//说明m6指向m4
	Mat m6 = m4;
	m6 = Scalar(0, 255, 255);
	imshow("创建图像", m4);

	//克隆会产生一个独立的个体
	//两者没有关系
	Mat m7 = m4.clone();
	m7 = Scalar(0, 255, 255);
	imshow("图像1", m4);
	imshow("图像2", m7);

	//copyTo操作也会产生一个独立的个体
	Mat m8;
	m4.copyTo(m8);  //将m4 copy给m8
	m8 = Scalar(0, 255, 255);
	imshow("图像3", m8);
}

图像像素的读写操作

void QuickDemo::pixel_visit_demo(Mat& image)
{
	int w = image.cols;
	int h = image.rows;
	int dims = image.channels();

	//遍历每个像素点
	for (int row = 0; row < h; row++)
	{
		for (int col = 0; col < w; col++)
		{
			if (dims == 1)   //灰度图像
			{
				//将当前这个像素点的颜色变为255-pv;
				int pv = image.at<uchar>(row, col);
				image.at<uchar>(row, col) = 255 - pv;
			}
			if (dims == 3)   //彩色图像
			{
				//获取该像素点的三个值rgb
				Vec3b bgr = image.at<Vec3b>(row, col);
				image.at<Vec3b>(row, col)[0] = 255 - bgr[0];
				image.at<Vec3b>(row, col)[1] = 255 - bgr[1];
				image.at<Vec3b>(row, col)[2] = 255 - bgr[2];
			}
		}
	}
	imshow("像素读写演示", image);
}

也可以使用指针 更简洁

//遍历每个像素点
	for (int row = 0; row < h; row++)
	{
		uchar* current_row = image.ptr<uchar>(row);
		for (int col = 0; col < w; col++)
		{
			if (dims == 1)   //灰度图像
			{
				*current_row++ = 255 - *current_row;
			}
			if (dims == 3)   //彩色图像
			{
                //不用麻烦的分三通道 指针会出手
				*current_row++ = 255 - *current_row;
				*current_row++ = 255 - *current_row;
				*current_row++ = 255 - *current_row;
			}
		}
	}

标签:Mat,int,image,Day1,current,col,row
From: https://www.cnblogs.com/ShadowAA/p/17316897.html

相关文章

  • day12-Web登录认证
    案例-登录认证在前面的课程中,我们已经实现了部门管理、员工管理的基本功能,但是大家会发现,我们并没有登录,就直接访问到了Tlias智能学习辅助系统的后台。这是不安全的,所以我们今天的主题就是登录认证。最终我们要实现的效果就是用户必须登录之后,才可以访问后台系统中的功能。1.......
  • 团队项目Scrum冲刺-day1
    这个作业属于哪个课程2023软件工程—双学位这个作业要求在哪里团队作业4——项目冲刺这个作业目标团队项目Scrum冲刺-day1目录1.Alpha任务认领2.明日安排3.项目预期任务量4.敏捷开发前的感想5.团队期望1.Alpha任务认领职责人员前端翟张博后端袁......
  • scrum项目冲刺_day1会议总结
    今日团队任务:图片转excel(5天)前端开发(需团队风格统一)调用接口(后端),json数据->excel前后端连接           任烁玚(进行中)            图片转html(8天)前端开发(需团队风格统一)图片转为pdf(存储)pdf转html(调用接口)[html存储到数据库]前后台数据同......
  • scrum项目冲刺_day1会议总结
    今日团队任务:图片转excel(5天)前端开发(需团队风格统一)调用接口(后端),json数据->excel前后端连接          任烁玚(进行中)            图片转html(8天)前端开发(需团队风格统一)图片转为pdf(存储)pdf转html(调用接口)[html存储到数据库]前后台数据同......
  • Day1
    2.代码#include<iostream>usingnamespacestd;intmain(){integg,hen,chicken;for(hen=0;hen<=20;hen++){for(chicken=0;chicken<=33;chicken++){egg=100-hen-chicken;if(egg/3.0+hen*5+chicken*3==100){......
  • Day14_Java_作业
    编程题:1:获取10个1-20之间的随机数,要求不能重复答:packageStudentWork;importjava.util.ArrayList;/****需求:1:获取10个1-20之间的随机数,要求不能重复*@authorAoman_Hao*/publicclassDay14_Work_Demo{publicstaticvoidmain(String[]args)......
  • docker-day1——docker介绍、docker安装
    目录一、docker介绍1.1什么是虚拟化1.2.1docker是什么1.2.2容器与虚拟机比较1.2.3Docker的一些概念1.2.3.1Docker服务器与客户端1.2.3.2Docker镜像与容器1.2.3.3Registry(注册中心)二、docker安装三、作业一、docker介绍1.1什么是虚拟化在计算机中,虚拟化(英语:Virtualiza......
  • 学习Java Day1
    尝试用Effie记录一下学习的java过程。2023.4.6-一些电脑的快捷键 -win+E打开我的电脑 -shift+delete永久删除文件-一些打开cmd的方法 -win+R(最常用)输入cmd -桌面其他位置+鼠标右键打开powershell -win找到windows系统打开命令提示符-一些cmd中的指令 -盘符切换......
  • Python学习——Day1
      学习python与C语言相似,第一件事也是输出一个”HelloWorld"。  但是相比C语言,python的输出要简洁好多,他没有换行符\n也能自动换行,print()函数里字符串无论是使用单引号还是双引号结果都能正常输出且输出结果一样。  第二个就是注释,python则与C语言不同,这里用到......
  • 【ACM算法竞赛日常训练】DAY10题解与分析【月月给华华出题】【华华给月月出题】| 筛法
    DAY10共2题:月月给华华出题华华给月月出题难度较大。......