#数字图像处理笔记总结1.0

这篇博客是作者作为大二学生学习数字图像处理的笔记,详细记录了OpenCV的安装步骤,并提供了测试代码。文章介绍了如何解决安装过程中遇到的问题,如添加环境变量、配置Visual Studio等。此外,还探讨了图像处理的基础操作,包括椒盐噪声的生成、灰度图像转换、亮度和对比度增强,以及图像叠加等概念。
摘要由CSDN通过智能技术生成

#数字图像处理笔记总结1.0*

##大二同学数字图像处理课程的学习笔记,定期更新

openGL的问题总结
安装步骤

1.官方网站:https://OpenCV.org/releases.html下载
在这里插入图片描述
2.点击Win pack,点击下载
在这里插入图片描述
3.自行解压
在这里插入图片描述
在这里插入图片描述
4.右键—计算机—属性—高级系统设置
在这里插入图片描述
环境变量—系统变量----变量名:path
路径:D:\Users\HP\Downloads\opencv\build\x64\vc15\bin
在这里插入图片描述
在这里插入图片描述

打开VS
1.新建空项目,不要改存储位置
在这里插入图片描述
2.在空项目-源文件-添加-新建项-C++文件
在这里插入图片描述

3.视图-属性管理器-Debug*64-新建Microsoft.cpp.x64.user文件-双击打开属性页-更改包含目录和根目录
包含目录:
D:\openCV\opencv\build\include
D:\openCV\opencv\build\include\opencv2
库目录:
D:\openCV\opencv\build\x64\vc15\lib
在这里插入图片描述
4.链接器—输入—附加依赖项添加文件OpenCV_world420d.lib
在这里插入图片描述
5.配置Debug/X64模式
在这里插入图片描述
6.测试代码
#include
#include <opencv2\core\core.hpp>
#include <opencv2\imgproc\imgproc.hpp>
#include <opencv2\highgui\highgui.hpp>

using namespace cv;
using namespace std;

void main(void)
{
Mat img = imread(“lena.jpg”);
namedWindow(“lena”);
imshow(“lena”,img);
waitKey(0);
}
在这里插入图片描述
问题总结:
1.无法启动程序,系统找不到指定文件:
新建C++文件的时候应该在源文件下鼠标右键-添加新建项
而不是 点的左上角新建文件!!!
2.未经处理的异常
在这里插入图片描述
在解决方案资源管理器中-总文件位置鼠标右键-选择在文件资源管理器中打开文件夹
-在打开的文件夹中添加图片
同方法可以打开该项目的.cpp文件!!!

安装完成后后可以用这段代码进行测试,检测是否安装完成。
关于测试图片代码的意义

#include //iostream库文件
#include <opencv2\core\core.hpp>//核心函数
#include <opencv2\imgproc\imgproc.hpp>//基础函数
#include <opencv2\highgui\highgui.hpp>//交互函数
//opencv中的库文件
using namespace cv;//opencv的命名文件
using namespace std;//C的命名空间
void main(void)//主函数,返回值是空值,参数也是空值,参数也可省略
{
Mat img = imread(“lena.jpg”);
//Mat是矩阵类型 img是图像名 imread表示读取文件,参数是文件名
namedWindow(“lena”);//命名窗口为lena
imshow(“lena”, img);//在lena这个窗口中显示img这个图像
waitKey(0);//如果不加会出现闪回,表示等待下一步指令才跳出
}

椒盐像素点

#include //iostream库文件
#include <opencv2\core\core.hpp>//核心函数
#include <opencv2\imgproc\imgproc.hpp>//基础函数
#include <opencv2\highgui\highgui.hpp>//交互函数
//opencv中的库文件
using namespace std;
using namespace cv;
void main(void)
{
Mat image = imread(“lena.jpg”);
imshow(“原图”, image);
//椒盐噪声:随机的白色像素点
//在图像范围内,取若干个数的随机像素点,并且变成白色
for (int k = 0; k < 5000; k++)//加了5000个像素点 这里可以调换
{
int i = rand() % image.cols;//column列
int j = rand() % image.rows;//行
image.at(j, i)[0] = 255;
//随机坐标点的第一个通道值变为白色,<通道数>(坐标)[通道数]255:白色
image.at(j, i)[1] = 255;
image.at(j, i)[2] = 255;
}
imshow(“椒盐噪声图”, image);
waitKey(0);
}
在这里插入图片描述
红椒盐和黑色椒盐

RGB常用:
白色(255,255,255)
黑色(0,0,0)
蓝色(255,0,0)
绿色(0,255,0)
红色(0,0,255)

改为灰色图像
方法1:
#include //iostream库文件
#include <opencv2\core\core.hpp>//核心函数
#include <opencv2\imgproc\imgproc.hpp>//基础函数
#include <opencv2\highgui\highgui.hpp>//交互函数
//opencv中的库文件
using namespace std;
using namespace cv;
void main(void)
{
Mat image = imread(“lena.jpg”,0);//括号后加0即灰色
//1–原图,0–灰度图 -1–彩色图
imshow(“图像”, image);
waitKey(0);
}
在这里插入图片描述

方法2:
#include //iostream库文件
#include <opencv2\core\core.hpp>//核心函数
#include <opencv2\imgproc\imgproc.hpp>//基础函数
#include <opencv2\highgui\highgui.hpp>//交互函数
//opencv中的库文件
using namespace std;
using namespace cv;
void main(void)
{
Mat image = imread(“lena.jpg”);
Mat gray;
imshow(“图像”, image);
cvtColor(image, gray, COLOR_BGR2GRAY);
//1-输入图像 2-输出图像 3-转换方式,把RGB图像转换为灰度图像
imshow(“灰度图”,gray);
waitKey(0);
}
在这里插入图片描述
亮度增强
明亮与对比度的调整属于点处理,而点处理最普遍就是加乘处理。
f(x)=ag(x)+b
Mat new_image=Mat::zeros(image.size(),image.type());
先建立一个大小与原图相同的矩阵,内容补0。
new_image.at(y,x)[c]=saturate_cast(a*(image.at<Vec
3b>(y,x)[c])+b);
图像处理使用3个for循环处理图像的每个点,第一个是行,第二个是列,
第三个是通道。
彩色图像需要处理三个通道(R、G、B)需要三个循环。
image.at(y,x)[c],y是列,x是行,c就是R、G、B(0、1、2),
以此类推。
三层循环也可以用如下指令操作:
image.convertTo(new_image,-1,a,b);

#include //iostream库文件
#include <opencv2\core\core.hpp>//核心函数
#include <opencv2\imgproc\imgproc.hpp>//基础函数
#include <opencv2\highgui\highgui.hpp>//交互函数
//opencv中的库文件
using namespace std;
using namespace cv;
void main(void)
{
Mat image = imread(“1.jpg”);
Mat newimage = Mat::zeros(image.size(), image.type());
//创建新图像,宽高和类型都与原图相同,将所有像素初始化为0
float a = 1.1;
int b = 50;
for (int y = 0; y < image.rows; y++)
{
for (int x = 0; x < image.cols; x++)
{
for (int c = 0; c < 3; c++)
newimage.at(y, x)[c]= saturate_cast(a * image.at(y, x)[c] + b);
//把括号里值归于0-255之间
//对每个像素点 进行了乘法和加法 进行了亮度增强
}
}
imshow(“原图”, image);
imshow(“亮度增强图”,newimage);
waitKey(0);
}
在这里插入图片描述
对比度增强
通过增加原图中某两个灰度值间的动态范围来
增强原图的各部分反差
在这里插入图片描述
#include //iostream库文件
#include <opencv2\core\core.hpp>//核心函数
#include <opencv2\imgproc\imgproc.hpp>//基础函数
#include <opencv2\highgui\highgui.hpp>//交互函数
//opencv中的库文件
using namespace std;
using namespace cv;
void main(void)
{
Mat image = imread(“1.jpg”);
Mat newimage = Mat::zeros(image.size(), image.type());
//创建新图像,宽高和类型都与原图相同,将所有像素初始化为0
float a = 1.1;
int b = 50;
for (int y = 0; y < image.rows; y++)
{
for (int x = 0; x < image.cols; x++)
{
for (int c = 0; c < 3; c++)
{
if (image.at(y, x)[c] >= 0 && image.at(y, x)[c] <= 80)
newimage.at(y, x)[c] = saturate_cast(0.5image.at(y, x)[c]);
else if (image.at(y, x)[c] >80 && image.at(y,x)[c] <= 150)
newimage.at(y, x)[c] = saturate_cast(2.28
image.at(y, x)[c]+142);
else
newimage.at(y, x)[c]= 200;
//把括号里值归于0-255之间
//对每个像素点 进行了乘法和加法 进行了亮度增强
}
}
}
imshow(“原图”, image);
imshow(“对比度增强图”, newimage);
waitKey(0);
在这里插入图片描述

图像叠加(同尺寸)
#include //iostream库文件
#include <opencv2\core\core.hpp>//核心函数
#include <opencv2\imgproc\imgproc.hpp>//基础函数
#include <opencv2\highgui\highgui.hpp>//交互函数
//opencv中的库文件
using namespace std;
using namespace cv;
void main(void)
{
Mat src1 = imread(“1.jpg”);
Mat src2 = imread(“2.jpg”);
Mat dst;
double a = 1, b = 0.2, g = 0;
addWeighted(src1, a, src2, b, g, dst);
imshow(“混合图”,dst);
waitKey(0);
}
图像叠加(不同尺寸,商标特效)
#include //iostream库文件
#include <opencv2\core\core.hpp>//核心函数
#include <opencv2\imgproc\imgproc.hpp>//基础函数
#include <opencv2\highgui\highgui.hpp>//交互函数
//opencv中的库文件
using namespace std;
using namespace cv;
void main(void)
{
//商标特效
Mat src1 = imread(“1.jpg”);
Mat src2 = imread(“2.jpg”);
Mat resize2;
Mat dst;
Mat image = src1;
Mat image_ROI;
resize(src2, resize2, Size(80, 64));//图像尺寸为8064
image_ROI = image(Rect(100, 100, 80, 64));//取位置在(100,100)宽高为80
64的矩阵
double a = 1, b = 0.5, g = 0;
addWeighted(image_ROI,a,resize2,b, g,image_ROI);
imshow(“混合图”,image);
waitKey(0);
}
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值