c++和opencv实现灰度图像的超混沌加解密代码
时间: 2023-07-24 11:20:41 浏览: 133
以下是 C++ 和 OpenCV 实现灰度图像的超混沌加解密的示例代码:
```c++
#include <iostream>
#include <fstream>
#include <cstdlib>
#include <ctime>
#include <cmath>
#include <opencv2/opencv.hpp>
using namespace std;
using namespace cv;
class HyperChaos
{
public:
HyperChaos(double x0, double y0, double z0, double u0, double v0);
double getNextValue();
void reset(double x0, double y0, double z0, double u0, double v0);
private:
double x, y, z, u, v;
};
HyperChaos::HyperChaos(double x0, double y0, double z0, double u0, double v0)
{
x = x0;
y = y0;
z = z0;
u = u0;
v = v0;
}
double HyperChaos::getNextValue()
{
double x1 = sin(y) + u * sin(z);
double y1 = sin(z) + v * sin(x);
double z1 = sin(x) + u * sin(y);
double u1 = cos(y);
double v1 = cos(z);
x = x1;
y = y1;
z = z1;
u = u1;
v = v1;
return x + y + z + u + v;
}
void HyperChaos::reset(double x0, double y0, double z0, double u0, double v0)
{
x = x0;
y = y0;
z = z0;
u = u0;
v = v0;
}
void encryptImage(Mat& image, HyperChaos& chaos)
{
int rows = image.rows;
int cols = image.cols;
for (int i = 0; i < rows; i++)
{
for (int j = 0; j < cols; j++)
{
double value = chaos.getNextValue();
int shift = (int)(value * 1000) % 256;
uchar& pixel = image.at<uchar>(i, j);
pixel ^= shift;
}
}
}
void decryptImage(Mat& image, HyperChaos& chaos)
{
int rows = image.rows;
int cols = image.cols;
for (int i = 0; i < rows; i++)
{
for (int j = 0; j < cols; j++)
{
double value = chaos.getNextValue();
int shift = (int)(value * 1000) % 256;
uchar& pixel = image.at<uchar>(i, j);
pixel ^= shift;
}
}
}
int main()
{
// 读取图像文件
Mat image = imread("lena.jpg", IMREAD_GRAYSCALE);
// 初始化超混沌系统
HyperChaos chaos(0.1, 0.2, 0.3, 0.4, 0.5);
// 加密图像
encryptImage(image, chaos);
// 保存加密后的图像
imwrite("lena_encrypted.jpg", image);
// 重置超混沌系统
chaos.reset(0.1, 0.2, 0.3, 0.4, 0.5);
// 解密图像
decryptImage(image, chaos);
// 保存解密后的图像
imwrite("lena_decrypted.jpg", image);
return 0;
}
```
这个示例程序中,使用了一个五维的超混沌系统来生成加密密钥。对于每个像素,使用超混沌系统生成一个随机数,将其乘以 1000 并取整数部分,得到一个 0 到 255 的整数,作为该像素的移位量。然后对该像素的灰度值进行异或操作,使用移位量进行移位,从而实现灰度图像的加密和解密。
阅读全文