用MATLAB实现一个数字图像加密解密系统
该项目已上传至GitHub:链接地址我的个人博客:谋仁·Blog微信公众号:谋仁的麻袋CSDN:曹谋仁
摘要&思维导图本项目是基于MATLAB实现的数字图像加密解密系统,加密算法由笔者自主设计。此加密系统可以百分百无损恢复到原图,支持对单通道、三通道数字图像图像的加密及解密,支持对jpg、jpeg、png、tif、tiff、bmp等众多主流图像格式加密及解密。此外,用户可以自己选择加密次数,加密次数越多,像素越混乱,安全系数越高。但对于接收方而言,无需知道加密次数,一键解密图像,方便又快捷。同时,该项目算法简单,易于学习,是个不错的数字图像处理练手项目。算法整体思维导图如下:
图像加密算法(附源码)笔者认为,所谓加密,就是“有规律的破坏”。即要在能保证复原的前提下尽可能地去“破坏”。这个“破坏”的程度越大,与原信息相关性越低,被攻破的难度就越大,加密效果就越好。因此,为了尽可能的“破坏”原图像,在此加密系统中,加密算法先后进行了像素数值加密和像素分布加密两部分,从两方面先后“破坏”原图,加密效果更好。
像素值加密像素值加密分为两步。第一步,由于RBG三通道图像以及单通道灰度 ...
【OpenCV入门】形状/轮廓的检测
我的个人博客:谋仁·Blog微信公众号:谋仁的麻袋CSDN:曹谋仁
检测前预处理—-边缘检测二值图所谓形状/轮廓的检测就是把待检测图像中的边缘轮廓组成的图形识别出来,并检测出轮廓点,再对其进行判断。所以为便于检测轮廓,我们要在检测之前进行一些预处理:灰度->高斯滤波->Canny边缘检测算法->图像膨胀代码:
123456789101112131415/// <summary>/// 形状检测前的预处理(灰度->高斯滤波->Canny边缘算法->膨胀)/// </summary>/// <param name="imgIn">Mat 类,输入图像</param>/// <returns>Mat类,预处理后的图像</returns>Mat preProcessing(Mat imgIn) { Mat imgGray, imgBlur, imgCanny, imgDila; //先定义一个内核 Mat kernel = getStructuringE ...
【OpenCV入门】颜色检测/滑块的创建
我的个人博客:谋仁·Blog微信公众号:谋仁的麻袋CSDN:曹谋仁
颜色的检测转换HSV模型颜色检测通常要从HSV图像中检测,所以先将原图转换成HSV模型。(用cvtColor函数,详情参考本人这篇文章:【OpenCV入门】一些基本的图像处理)
inRange函数函数作用:对图像进行二值化处理,将在阈值范围[lowerb,upperb]内的像素值设置为白色(255),而不在阈值区间内的像素值设置为黑色(0)。
函数定义:
123456void inRange( InputArray src, InputArray lowerb, InputArray upperb, OutputArray dst );
参数解释:
src:输入图像
lowerb:包含下边界的数组或标量
upperb:包含上边界的数组或标量
dst:输出尺寸与输入图像相同的二值化图像图像
为了准确检测到预期颜色,我们要严格选取下限lowerb和上限upperb的H、S、V三个参数的值。所以,为便于寻找准确的阈值,我们通常配合createTrackbar函数生成滑块在运行程序后通过拖动滑块来 ...
【OpenCV入门】透视变换
我的个人博客:谋仁·Blog微信公众号:谋仁的麻袋CSDN:曹谋仁
Point2f类图像由一个个像素点组成,我们为了存储每一个像素点,通常用Point类中(x,y)坐标来表示。Point2f表示Point类的两个数据x,y为float类型。为了将原图中的某一块区域处理成鸟瞰图,我们首先要用Point2f来确定几个点来框定待处理区域。在这里,我们将要将一张斜放的扑克牌处理成鸟瞰图。故用四个点就足够确定其范围。然后再建立一个Point2f类数组存放与原图框定区域对应的处理后的鸟瞰图在新窗口中的位置。相应代码:
123Point2f srcPoint[4] = { {530,143},{773,193},{403,394}, {674,455} };//原图中框定四个点Point2f dstPoint[4] = { {0.0f,0.0f},{cardWidth,0.0f},{0.0f,cardHeight}, { ...
【OpenCV入门】调整图像大小/裁剪图像
调整图像大小-resize函数resize函数的定义
1234567void resize( InputArray src, //输入图像 OutputArray dst,//输出图像 Size dsize, //调整成的大小 double fx = 0, double fy = 0, int interpolation = INTER_LINEAR );
参数解释:
src:输入的图像,Mat类
dst:输出的图像,当参数dsize不为0时,dst的大小由dsize决定;否则,它的大小由参数fx和fy决定
dsize:输出图像的大小,写成Size(宽,高)(单位:像素)
fx和fy:水平/竖直方向上的缩放比例
interpolation:插值方法。取值如下: INTER_NEAREST———最近邻插值 INTER_LINEAR———双线性插值(默认设置) INTER_AREA———使用像素区域关系进行重采样 INTER_CUBIC———4x4像素邻域的双 ...
【OpenCV入门】一些基本的图像处理
我的个人博客:谋仁·Blog微信公众号:谋仁的麻袋
一些概念颜色空间为了表示一种特定的颜色,我们通常建立一维、二维、三维甚至四维空间坐标来表示,这种坐标系统所能定义的色彩范围即颜色空间。下面列举常见的颜色空间:
RGB模型 RGB模型将颜色编码成(R,G,B)即(Red红,Green绿,Blue蓝)。每个分量范围是[0,255]共256级。因此,RGB模型可以表示256×256×256≈1670万种颜色。 注意:在OpenCV中存储顺序不是RGB,而是BGR。
单通道模型 单通道图即灰度图,图片像素颜色由一维的值来表示,分量范围是[0,255]。0是黑色,255是白色,中间是不同程度的灰色。
二值模型 二值图像即黑白图像,每个像素的颜色由一维的值来表示,分量范围是[0,1],0代表黑色,1代表白色。
HSV模型 HSV模型由三个参数来表示颜色:色调(H)、饱和度(S)、明度(V)。 色调(H)用角度表示,范围[0°,360°],红色为0°,从红色开始按逆时针方向计算。(如下图) 饱和度(S)表示颜色接近光谱色的程度,饱和度越高,颜色越深而艳。取值范围[0%,100%]。 ...
【OpenCV入门】读取图片/视频/调用摄像头
我的个人博客:谋仁·Blog公众号:谋仁的麻袋
读取图片
预期效果:从指定路径读取一张图片并显示出来。
源代码:
123456789101112131415161718#include <iostream>//输入输出流#include <opencv2/opencv.hpp>using namespace cv;using namespace std;//c++标准库#ifdef _DEBUG#pragma comment(lib,"opencv_world453d.lib")#else#pragma comment(lib,"opencv_world453.lib")#endif // _DEBUGint main() { string path = "Resources/test.png";//相对路径 Mat outImg=imread(path);//从指定路径读取图片信息 imshow("图片", outImg);//将图片显示出来 waitKey(0); ...
【C#】值传递、引用传递和string类型的不可变性
值类型和引用类型值类型/引用类型包含有:
值类型:int、double、bool、char、decimal、struct、enum
引用类型:string、自定义类、数组、集合、object、接口
二者的区别:
1、值类型和引用类型在内存上存储的地方不同:
值类型存储在栈中,引用类型存储在堆中。
2、在传递值类型和传递引用类型时,传递方式不同;
值类型的传递值类型在传递的时候,传递的是值本身。
1234567891011121314151617using System;namespace 值传递和引用传递{ class Program { static void Main(string[] args) { int a = 1; int b = a; b = 2; Console.WriteLine("a={0}",a); Console.WriteLine( ...
用C语言实现飞机大战小游戏
我的个人博客:谋仁·Blog该项目已上传至GitHub:点击跳转
摘要这是一个用C语言实现的基于EasyX图形库的飞机大战小游戏,很有意思的小项目。对初学者很友好哦!快来看一下吧!
运行环境Windows10+Visual Studio 2019+EasyX_20210730
整体功能思维导图
效果预览
菜单界面(此时鼠标指在GO!按钮,按钮发生变色以反馈用户)
玩法界面(跳出弹窗介绍游戏规则)
进入游戏界面(敌机在窗体最上端随机出现,玩家移动/发射子弹)
游戏结束
具体功能的实现图形界面:EasyXEasyX图形库简介
EasyX Graphics Library 是针对 Visual C++ 的免费绘图库,因其学习成本低、易上手、应用范围广、功能丰富等特点广受欢迎。
我们学习C语言面对着黑框,枯燥又乏味。想要做一些图形编程,但很多图形库学习难度大,学习门槛高,如:Win32,OpenlGI等。这时候我们就可以使用EasyX图形库来做一些图形编程,既简单又有趣。
EasyX图形库的一些基本功能(该项目用到的)
如何让一张图片显现出来?分三步:
绘制窗体 ...