好的我正在开发视频处理项目,这包括加密每个帧并将其写入文件(outputenc.avi)。我使用key.jpg来加密每个文件使用XOR操作并且进展顺利但问题是在解密期间我得到一个嘈杂的原始图像键和正在处理的帧是尺寸为384 * 288的灰度图像。
encyption
capWebcam.read(matOriginal);
if(matOriginal.empty()==true)
return;
cv::Mat temp;
cv::resize(matOriginal,matOriginal,dsize,0,0,cv::INTER_CUBIC);
cv::cvtColor(matOriginal,matProcessed,CV_BGR2GRAY);
cv::bitwise_xor(matProcessed,key,temp);
output_enc_cap.write(temp);
解密
capfile.read(temp);
if(temp.empty()==true)
return;
cvtColor(temp,temp,CV_BGR2GRAY);
cv::bitwise_xor(temp,key,temp);
答案 0 :(得分:1)
您的代码存在更多问题:
首先,将帧转换为灰度:
cv::cvtColor(matOriginal,matProcessed,CV_BGR2GRAY);
然后将其发送到您的文件。从这一点开始,没有办法让你的彩色图像恢复。
然后,您使用(最可能有损)编解码器保存图像。有损编解码器在此过程中丢失了一些信息。它只能保证压缩图像看起来与原始图像类似。不能保证它是完全相同的。而且由于“加密”图像是噪声,结果将是噪声。但可能是完全不同的噪音。
然后,此行尝试就地执行无法正常工作的算法。但更重要的是,您在文件中写了一个灰度图像,然后尝试将其转换为灰度,就像它是彩色一样。完全废话。
cvtColor(temp,temp,CV_BGR2GRAY);
然后,你在一个除了“加密”的图像之外的图像上尝试“解密算法”。
抱歉,您的代码中的每一行都是无意义的。
所以,我的建议是降低速度:了解编解码器,了解加密和安全性,阅读其他人对此主题所做的工作,然后开始。
顺便说一下,创建自己的加密算法不是最好的主意(至少在你不是密码学专家时): https://security.stackexchange.com/questions/25585/is-my-developers-home-brew-password-security-right-or-wrong-and-why