資源簡介
此代碼需要VS實現完成opencv300的環境配置。下載了opencv3.00版后記得在屬性管理器中添加現有的屬性表。

代碼片段和文件信息
//?Arnold-cat.cpp?:?定義控制臺應用程序的入口點。
//
#include?“stdafx.h“
#include?
#include???
#include???
#include???
using?namespace?std;
using?namespace?cv;
int?iteration?=?10;?//變換次數//密鑰
int?mod(int?number?int?mod)//求模運算,用于負數求模
{
return?(number?%?mod?+?mod)?%?mod;
}
int?_tmain(int?argc?_TCHAR*?argv[])
{
/**********************加密****************************************************/
Mat?img1?=?imread(“lena.bmp“);//讀取圖像
if?(img1.empty())//讀取失敗
{
cout?<“讀取圖像失敗“;
return?-1;
}
imshow(“lena原始圖片“?img1);//顯示原始圖像
Sleep(1000);//延遲1秒已保證加密圖像的順利保存
/************************************************************/
/***********************************************************/
IplImage?*img2?=?cvLoadImage(“lena.bmp“?1);//加載原始圖像以讀取像素值
CvScalar?s;
//typedef?struct?CvScalar{double?val[4];}?CvScalar;
//通常用的是前三個,val[0]val[1]val[2]的含義分別是圖像的三個通道RGB通道:R是紅色分量,G是綠色分量,B是藍色分量。
cvNamedWindow(“lena加密圖片“?1);//創建一個新窗口用于顯示圖片
char?temp_imageData[230000]?=?{?0?};//存放置亂的像素值
int?x?=?0?y?=?0;?//置亂的像素點坐標
int?length?=?(img2->height?>?img2->width)???img2->width?:?img2->height;//取寬和高的最小值,以防止越界
for?(int?t?=?0;?t? {
for?(int?i?=?0;?i? {
for?(int?j?=?0;?j? /*注意Cat映射必須是正方形圖片,否則沒有逆變換,所以這里寬和高都取length*/
{
/**************************/
//此處添加額外代碼實現圖像的加密,即實現s的置亂
x?=?mod((i?+?j)?length);
y?=?mod((i?+?2?*?j)?length);
for?(int?k?=?0;?k?3;?k++)
{
temp_imageData[img2->widthStep*x?+?3?*?y?+?k]?=?img2->imageData[img2->widthStep*i?+?3?*?j?+?k];
}
/**************************/
}
}
for?(int?x?=?0;?x? {
for?(int?y?=?0;?y? {
for?(int?k?=?0;?k?3;?k++)
{
img2->imageData[img2->widthStep*x?+?3?*?y?+?k]?=?temp_imageData[img2->widthStep*x?+?3?*?y?+?k];
}
}
}
}
cvShowImage(“lena加密圖片“?img2);//顯示加密圖像
cvSaveImage(“lena-encrypt.bmp“?img2);//保存加密圖像到工程目錄下
/************************************************************/
Sleep(1000);//延遲1秒已保證加密圖像的順利保存
/************************************************************/
cvNamedWindow(“lena解密圖片“?1);
char?temp_imageData2[230000]?=?{?0?};
IplImage?*img3?=?cvLoadImage(“lena-encrypt.bmp“?1);
for?(int?t?=?0;?t? {
for?(int?i?=?0;?i? {
for?(int?j?=?0;?j? {
/**************************/
//此處添加額外代碼實現像素點坐標的逆變換,即由(i,j)得到(x,y),并將像素點(i,j)的BGR像素值復制給臨時數組temp_imageData中的坐標(x,y)
x?=?mod((2?*?i?-?j)?length);
y?=?mod((-i?+?j)?length);
for?(int?k?=?0;?k?3;?k++)
{
temp_imageData2[img3->widthStep*x?+?3?*?y?+?k]?=?img3->imageData[img3->widthStep*i?+?3?*?j?+?k];
}
/**************************/
}
}
/**************************/
//此處添加額外代碼將臨時數組temp_imageData中的所有像素值復制到當前幀的imageData中,以完成一次逆變換
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
????.CA....??????3848??2019-03-29?13:43??Arnold-cat\Arnold-cat\Arnold-cat.cpp
????.CA....??????8217??2019-03-28?21:17??Arnold-cat\Arnold-cat\Arnold-cat.vcxproj
????.CA....??????1317??2019-03-28?20:35??Arnold-cat\Arnold-cat\Arnold-cat.vcxproj.filters
????.CA....????715766??2018-05-29?20:43??Arnold-cat\Arnold-cat\baby.bmp
????.CA....????196662??2019-03-29?13:43??Arnold-cat\Arnold-cat\lena-discrypt.bmp
????.CA....????196662??2019-03-29?13:43??Arnold-cat\Arnold-cat\lena-encrypt.bmp
????.CA....????196662??2019-03-29?12:08??Arnold-cat\Arnold-cat\lena.bmp
????.CA....?????79330??2019-03-29?12:08??Arnold-cat\Arnold-cat\lena.png
????.CA....??????1531??2019-03-28?20:35??Arnold-cat\Arnold-cat\ReadMe.txt
????.CA....???????216??2019-03-28?20:35??Arnold-cat\Arnold-cat\stdafx.cpp
????.CA....???????234??2019-03-28?20:35??Arnold-cat\Arnold-cat\stdafx.h
????.CA....???????236??2019-03-28?20:35??Arnold-cat\Arnold-cat\targetver.h
????.CA....???????668??2019-03-29?12:31??Arnold-cat\Arnold-cat\x64\Debug\Arnold-cat.Build.CppClean.log
????.CA....??????2096??2019-03-29?13:43??Arnold-cat\Arnold-cat\x64\Debug\Arnold-cat.log
????.CA....????266077??2019-03-29?13:43??Arnold-cat\Arnold-cat\x64\Debug\Arnold-cat.obj
????.CA....???1638400??2019-03-29?12:32??Arnold-cat\Arnold-cat\x64\Debug\Arnold-cat.pch
????.CA....???????184??2019-03-29?13:43??Arnold-cat\Arnold-cat\x64\Debug\Arnold-cat.tlog\Arnold-cat.lastbuildstate
????.CA....??????1538??2019-03-29?13:43??Arnold-cat\Arnold-cat\x64\Debug\Arnold-cat.tlog\cl.command.1.tlog
????.CA....?????29174??2019-03-29?13:43??Arnold-cat\Arnold-cat\x64\Debug\Arnold-cat.tlog\CL.read.1.tlog
????.CA....??????1314??2019-03-29?13:43??Arnold-cat\Arnold-cat\x64\Debug\Arnold-cat.tlog\CL.write.1.tlog
????.CA....??????2482??2019-03-29?13:43??Arnold-cat\Arnold-cat\x64\Debug\Arnold-cat.tlog\li
????.CA....??????6220??2019-03-29?13:43??Arnold-cat\Arnold-cat\x64\Debug\Arnold-cat.tlog\li
????.CA....???????708??2019-03-29?13:43??Arnold-cat\Arnold-cat\x64\Debug\Arnold-cat.tlog\li
????.CA....?????10450??2019-03-29?12:32??Arnold-cat\Arnold-cat\x64\Debug\stdafx.obj
????.CA....????871424??2019-03-29?13:43??Arnold-cat\Arnold-cat\x64\Debug\vc120.idb
????.CA....????815104??2019-03-29?13:43??Arnold-cat\Arnold-cat\x64\Debug\vc120.pdb
????.CA....??38993920??2019-04-02?20:45??Arnold-cat\Arnold-cat.sdf
????.CA....??????1330??2019-03-28?21:17??Arnold-cat\Arnold-cat.sln
????.CA..H.?????26112??2019-04-02?20:45??Arnold-cat\Arnold-cat.v12.suo
????.CA....???3014656??2019-04-02?19:56??Arnold-cat\ipch\arnold-cat-488df716\arnold-cat-1664980f.ipch
............此處省略15個文件信息
- 上一篇:基于logistics映射的圖像加密-VS
- 下一篇:uvm user guide
評論
共有 條評論