使用opencv 获取图片像素值 并分别对RGB值进行八位01串的加解密
环境:visual studio、opencv(需要安装)
#include <iostream>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
using namespace std;
//#define key 0xa9
int key[8]={0,1,0,0,0,0,1,0};
using namespace cv;
int main(int argc, char* argv[])
{
IplImage *img = cvLoadImage("00.jpg",1);
//cvSaveImage("test111.jpg",img);
CvScalar s;
cvNamedWindow("Image",1);
cvShowImage("Image",img);
int flag=1;
for(int ii = 0;ii < img->height;ii++)
{
for(int jj = 0;jj < img->width;jj++)
{
s = cvGet2D(img,ii,jj); // get the (i,j) pixel value
int col[3][8];
memset(col,0,sizeof(col));
for(int i=0;i<3;i++)
{
int num=0;
if(flag)
cout<<"像素值: "<<(int)s.val[i]<<endl;
while(((int)s.val[i]))
{
col[i][7-num]=((int)s.val[i])%2;
//if(flag) cout<<"模的值: "<<col[i][7-num]<<endl;
s.val[i]=s.val[i]/2.0;
//if(flag) cout<<"s.val[i] "<<(int)s.val[i]<<endl;
num++;
}
for(int j=0;j<8;j++)
{
if(flag)
cout<<col[i][j];
col[i][j]=col[i][j]^key[j];
}
if(flag)
cout<<endl;
int sum=0;
int x=1;
for(int j=0;j<8;j++)
{
if(flag)
cout<<col[i][7-j];
sum+=col[i][7-j]*x;
x*=2;
}
if(flag)
cout<<"\nsum "<<sum<<endl;
s.val[i]=sum;
}
flag=0;
cvSet2D(img,ii,jj,s);//set the (i,j) pixel value
}
}
//cvShowImage("Image",img);
cvSaveImage("01.jpg",img);
cvWaitKey(0); //等待按键
cvDestroyWindow( "Image" );//销毁窗口
//cvReleaseImage( &img ); //释放图像
//system("pause");
return 0;
}