在一张图片中隐藏另一张图片

首先是在灰度图中隐藏灰度图

因为是交作业嘛,为了简单就依次在每个字节中隐藏信息,如果有什么不想让人看见的东西要隐藏,可以自己有选择性的隐藏

这里先得到两张灰度图

将第二幅图片当作秘密图片插入一图,这里先将第二幅图置乱

这里采用的是菱形置乱的方法,即在菱形中从第一行开始从左向右依次写入1到n,替换时从第一列从上到下依次读取序号,即第一列序号对应的像素作为第一个像素

代码如下,这里我用的算法比较笨就将就吧,恢复置乱时只需要更改其中一条代码,在代码中已说明

再说明一下,我是将菱形补全为正方形,用0填充,方法虽笨但是能用

/*
对图片进行置乱处理
2015年6月2日20:02:18
blog:http://www.cnblogs.com/wd1001/
*/
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
/*
位图头结构
*/
#pragma pack(1)
typedef struct tagBITMAPFILEHEADER
{
    unsigned char bfType[2];//文件格式
    unsigned long bfSize;//文件大小
    unsigned short bfReserved1;//保留
    unsigned short bfReserved2;
    unsigned long bfOffBits; //DIB数据在文件中的偏移量
}fileHeader;
#pragma pack()
/*
位图数据信息结构
*/
#pragma pack(1)
typedef struct tagBITMAPINFOHEADER
{
    unsigned long biSize;//该结构的大小
    long biWidth;//文件宽度
    long biHeight;//文件高度
    unsigned short biPlanes;//平面数
    unsigned short biBitCount;//颜色位数
    unsigned long biCompression;//压缩类型
    unsigned long biSizeImage;//DIB数据区大小
    long biXPixPerMeter;
    long biYPixPerMeter;
    unsigned long biClrUsed;//多少颜色索引表
    unsigned long biClrImporant;//多少重要颜色
}fileInfo;
#pragma pack()
/*
调色板结构
*/
#pragma pack(1)
typedef struct tagRGBQUAD
{
    unsigned char rgbBlue; //蓝色分量亮度
    unsigned char rgbGreen;//绿色分量亮度
    unsigned char rgbRed;//红色分量亮度
    unsigned char rgbReserved;
}rgbq;
#pragma pack()

typedef struct MixSpace
{
    unsigned long mix[600];
}MixS;
int main()
{
    FILE * fpOri,* fpSec;
    int i,j,k,t;
    int m=1;
    unsigned char ImgData[300][300];
    unsigned char ImgData2[300][300];
    /*这里采用菱形置乱*/
    MixS * MixBox=(MixS *)malloc(sizeof(MixS)*600);//置乱模板
    MixS * MixBox2=(MixS *)malloc(sizeof(MixS)*300);//置乱后模板

    fileHeader * fh;
    fileInfo * fi;
    rgbq * fq;
    if((fpOri=fopen("G:/vc6.0/work/3/31.bmp","rb"))==NULL)
    {
        printf("打开文件失败");
        exit(0);
    }

    if((fpSec=fopen("G:/vc6.0/work/3/32.bmp","wb"))==NULL)
    {
        printf("创建文件失败");
        exit(0);
    }

    fh=(fileHeader *)malloc(sizeof(fileHeader));
    fi=(fileInfo *)malloc(sizeof(fileInfo));
    fq=(rgbq *)malloc(sizeof(rgbq)*256);
    fread(fh,sizeof(fileHeader),1,fpOri);
    fread(fi,sizeof(fileInfo),1,fpOri);
    fread(fq,sizeof(rgbq),256,fpOri);

    for(i=0;i<fi->biHeight;i++)
    {
        for(j=0;j<(fi->biWidth+3)/4*4;j++)
            fread(&ImgData[i][j],1,1,fpOri);
    }

    /*置乱模板初始化*/
    for(i=0;i<(fi->biWidth+3)/4*4*2-1;i++)
    {
        if(i<(fi->biWidth+3)/4*4)
        {
            k=(fi->biWidth+3)/4*4-1-i;
            t=i+1;
            for(j=0;j<(fi->biWidth+3)/4*4*2-1;j++)
            {
                if(k>0)
                {
                    (MixBox+i)->mix[j]=0;
                    k--;
                }

                else if(t>0)
                {

                    (MixBox+i)->mix[j]=m;
                    (MixBox+i)->mix[j+1]=0;
                    j++;
                    m++;
                    t--;
                }
                else
                    (MixBox+i)->mix[j]=0;
            }

        }
        else
        {
            k=i-(fi->biWidth+3)/4*4+1;
            t=(fi->biWidth+3)/4*4-k;
            for(j=0;j<(fi->biWidth+3)/4*4*2-1;j++)
            {

                if(k>0)
                {
                    (MixBox+i)->mix[j]=0;
                    k--;
                }
                else if(t>0)
                {
                    (MixBox+i)->mix[j]=m;
                    (MixBox+i)->mix[j+1]=0;
                    j++;
                    m++;
                    t--;
                }
                else
                    (MixBox+i)->mix[j]=0;
            }
        }
    }
    /*置乱后模板*/
    k=t=0;
    for(i=0;i<(fi->biWidth+3)/4*4*2-1;i++)
    {
        for(j=0;j<(fi->biWidth+3)/4*4*2-1;j++)
        {
            if(((MixBox+j)->mix[i])!=0)
            {
                (MixBox2+k)->mix[t]=(MixBox+j)->mix[i];
                t++;
                if(t>=(fi->biWidth+3)/4*4)
                {
                    k++;
                    t=0;
                }
            }
        }
    }
    /*将图片置乱*/
    for(i=0;i<fi->biHeight;i++)
    {
        for(j=0;j<(fi->biWidth+3)/4*4;j++)
        {
            k=((MixBox2+i)->mix[j])/((fi->biWidth+3)/4*4);
            t=((MixBox2+i)->mix[j])%((fi->biWidth+3)/4*4-1);
            /*
            恢复置乱时只需将这句改为
            ImgData2[k][t]=ImgData[i][j];
            并修改前面文件路径即可
            */
            ImgData2[i][j]=ImgData[k][t];
        }
    }

    /*将图片数据写入*/
    fwrite(fh,sizeof(fileHeader),1,fpSec);
    fwrite(fi,sizeof(fileInfo),1,fpSec);
    fwrite(fq,sizeof(rgbq),256,fpSec);
    for(i=0;i<fi->biHeight;i++)
    {
        for(j=0;j<(fi->biWidth+3)/4*4;j++)
            fwrite(&ImgData2[i][j],1,1,fpSec);
    }

    free(fh);
    free(fi);
    free(fq);
    free(MixBox);
    free(MixBox2);
    fclose(fpOri);
    fclose(fpSec);
    printf("success\n");
    return 0;
}

好了下面就是隐藏后图片了,这里舍弃图片低四位,将秘密图片高四位隐藏到载体图低四位

载体图片改变有点大,可以考虑将图片隐藏在大一点图片中,一字节只隐藏2位或者1位,效果会更好

  1 /*
  2 将一张图片隐藏到另一张图片中
  3 载体图为灰度图
  4 blog:http://www.cnblogs.com/wd1001/
  5 2015年6月3日17:59:34
  6 */
  7 #include<stdio.h>
  8 #include<malloc.h>
  9 #include<stdlib.h>
 10 /*
 11 位图头结构
 12 */
 13 #pragma pack(1)
 14 typedef struct tagBITMAPFILEHEADER
 15 {
 16     unsigned char bfType[2];//文件格式
 17     unsigned long bfSize;//文件大小
 18     unsigned short bfReserved1;//保留
 19     unsigned short bfReserved2;
 20     unsigned long bfOffBits; //DIB数据在文件中的偏移量
 21 }fileHeader;
 22 #pragma pack()
 23 /*
 24 位图数据信息结构
 25 */
 26 #pragma pack(1)
 27 typedef struct tagBITMAPINFOHEADER
 28 {
 29     unsigned long biSize;//该结构的大小
 30     long biWidth;//文件宽度
 31     long biHeight;//文件高度
 32     unsigned short biPlanes;//平面数
 33     unsigned short biBitCount;//颜色位数
 34     unsigned long biCompression;//压缩类型
 35     unsigned long biSizeImage;//DIB数据区大小
 36     long biXPixPerMeter;
 37     long biYPixPerMeter;
 38     unsigned long biClrUsed;//多少颜色索引表
 39     unsigned long biClrImporant;//多少重要颜色
 40 }fileInfo;
 41 #pragma pack()
 42 /*
 43 调色板结构
 44 */
 45 #pragma pack(1)
 46 typedef struct tagRGBQUAD
 47 {
 48     unsigned char rgbBlue; //蓝色分量亮度
 49     unsigned char rgbGreen;//绿色分量亮度
 50     unsigned char rgbRed;//红色分量亮度
 51     unsigned char rgbReserved;
 52 }rgbq;
 53 #pragma pack()
 54
 55 int main()
 56 {
 57     FILE * fpCov,* fpSec,*fpSte;
 58     int i,j;
 59     unsigned char ImgData[300][300];
 60     unsigned char ImgData2[300][300];
 61
 62     fileHeader * fh,*fh2;
 63     fileInfo * fi,*fi2;
 64     rgbq * fq,*fq2;
 65     if((fpCov=fopen("G:/vc6.0/work/3/21.bmp","rb"))==NULL)
 66     {
 67         printf("打开文件失败");
 68         exit(0);
 69     }
 70
 71     if((fpSec=fopen("G:/vc6.0/work/3/32.bmp","rb"))==NULL)
 72     {
 73         printf("打开文件失败");
 74         exit(0);
 75     }
 76     if((fpSte=fopen("G:/vc6.0/work/3/123.bmp","wb"))==NULL)
 77     {
 78         printf("创建文件失败");
 79         exit(0);
 80     }
 81     /*
 82     读取载体图片
 83     */
 84     fh=(fileHeader *)malloc(sizeof(fileHeader));
 85     fi=(fileInfo *)malloc(sizeof(fileInfo));
 86     fq=(rgbq *)malloc(sizeof(rgbq)*256);
 87     fread(fh,sizeof(fileHeader),1,fpCov);
 88     fread(fi,sizeof(fileInfo),1,fpCov);
 89     fread(fq,sizeof(rgbq),256,fpCov);
 90
 91     for(i=0;i<fi->biHeight;i++)
 92     {
 93         for(j=0;j<(fi->biWidth+3)/4*4;j++)
 94             fread(&ImgData[i][j],1,1,fpCov);
 95     }
 96     /*读取秘密图片*/
 97     fh2=(fileHeader *)malloc(sizeof(fileHeader));
 98     fi2=(fileInfo *)malloc(sizeof(fileInfo));
 99     fq2=(rgbq *)malloc(sizeof(rgbq)*256);
100     fread(fh2,sizeof(fileHeader),1,fpSec);
101     fread(fi2,sizeof(fileInfo),1,fpSec);
102     fread(fq2,sizeof(rgbq),256,fpSec);
103
104     for(i=0;i<fi->biHeight;i++)
105     {
106         for(j=0;j<(fi->biWidth+3)/4*4;j++)
107             fread(&ImgData2[i][j],1,1,fpSec);
108     }
109     /*隐藏图片*/
110     for(i=0;i<fi->biHeight;i++)
111     {
112         for(j=0;j<(fi->biWidth+3)/4*4;j++)
113         {
114             /*将载体图片低四位置零*/
115             ImgData[i][j]=ImgData[i][j]&240;
116             /*将秘密图片低四位置零*/
117             ImgData2[i][j]=ImgData2[i][j]&240;
118             /*将秘密图片高四位移到低四位*/
119             ImgData2[i][j]=ImgData2[i][j]>>4;
120             /*将秘密图片隐藏到载体图片中*/
121             ImgData[i][j]=ImgData[i][j]+ImgData2[i][j];
122         }
123     }
124     /*将图片数据写入*/
125     fwrite(fh,sizeof(fileHeader),1,fpSte);
126     fwrite(fi,sizeof(fileInfo),1,fpSte);
127     fwrite(fq,sizeof(rgbq),256,fpSte);
128     for(i=0;i<fi->biHeight;i++)
129     {
130         for(j=0;j<(fi->biWidth+3)/4*4;j++)
131             fwrite(&ImgData[i][j],1,1,fpSte);
132     }
133
134
135     free(fh);
136     free(fi);
137     free(fq);
138     fclose(fpCov);
139     fclose(fpSec);
140     fclose(fpSte);
141     printf("success\n");
142     return 0;
143 }

秘密图片的提取呢,也就非常简单了

提取并恢复置乱:

下面是提取秘密图片的代码,就不多做解释了,跟隐藏代码差不多

  1 /*
  2 从灰度图片中提取隐藏图片
  3 2015年6月3日19:32:12
  4 blog:http://www.cnblogs.com/wd1001/
  5 */
  6 #include<stdio.h>
  7 #include<malloc.h>
  8 #include<stdlib.h>
  9 /*
 10 位图头结构
 11 */
 12 #pragma pack(1)
 13 typedef struct tagBITMAPFILEHEADER
 14 {
 15     unsigned char bfType[2];//文件格式
 16     unsigned long bfSize;//文件大小
 17     unsigned short bfReserved1;//保留
 18     unsigned short bfReserved2;
 19     unsigned long bfOffBits; //DIB数据在文件中的偏移量
 20 }fileHeader;
 21 #pragma pack()
 22 /*
 23 位图数据信息结构
 24 */
 25 #pragma pack(1)
 26 typedef struct tagBITMAPINFOHEADER
 27 {
 28     unsigned long biSize;//该结构的大小
 29     long biWidth;//文件宽度
 30     long biHeight;//文件高度
 31     unsigned short biPlanes;//平面数
 32     unsigned short biBitCount;//颜色位数
 33     unsigned long biCompression;//压缩类型
 34     unsigned long biSizeImage;//DIB数据区大小
 35     long biXPixPerMeter;
 36     long biYPixPerMeter;
 37     unsigned long biClrUsed;//多少颜色索引表
 38     unsigned long biClrImporant;//多少重要颜色
 39 }fileInfo;
 40 #pragma pack()
 41 /*
 42 调色板结构
 43 */
 44 #pragma pack(1)
 45 typedef struct tagRGBQUAD
 46 {
 47     unsigned char rgbBlue; //蓝色分量亮度
 48     unsigned char rgbGreen;//绿色分量亮度
 49     unsigned char rgbRed;//红色分量亮度
 50     unsigned char rgbReserved;
 51 }rgbq;
 52 #pragma pack()
 53
 54 int main()
 55 {
 56     FILE * fpCov,* fpSec,*fpSte;
 57     int i,j;
 58     unsigned char ImgData[300][300];
 59     unsigned char ImgData2[300][300];
 60
 61     fileHeader * fh;
 62     fileInfo * fi;
 63     rgbq * fq;
 64     if((fpSte=fopen("G:/vc6.0/work/3/123.bmp","rb"))==NULL)
 65     {
 66         printf("打开文件失败");
 67         exit(0);
 68     }
 69
 70     if((fpCov=fopen("G:/vc6.0/work/3/123C.bmp","wb"))==NULL)
 71     {
 72         printf("创建文件失败");
 73         exit(0);
 74     }
 75     if((fpSec=fopen("G:/vc6.0/work/3/123S.bmp","wb"))==NULL)
 76     {
 77         printf("创建文件失败");
 78         exit(0);
 79     }
 80     /*
 81     读取图片
 82     */
 83     fh=(fileHeader *)malloc(sizeof(fileHeader));
 84     fi=(fileInfo *)malloc(sizeof(fileInfo));
 85     fq=(rgbq *)malloc(sizeof(rgbq)*256);
 86     fread(fh,sizeof(fileHeader),1,fpSte);
 87     fread(fi,sizeof(fileInfo),1,fpSte);
 88     fread(fq,sizeof(rgbq),256,fpSte);
 89
 90     for(i=0;i<fi->biHeight;i++)
 91     {
 92         for(j=0;j<(fi->biWidth+3)/4*4;j++)
 93             fread(&ImgData[i][j],1,1,fpSte);
 94     }
 95
 96     /*提取图片*/
 97     for(i=0;i<fi->biHeight;i++)
 98     {
 99         for(j=0;j<(fi->biWidth+3)/4*4;j++)
100         {
101             /*提取低四位存到秘密图片中*/
102             ImgData2[i][j]=ImgData[i][j]&15;
103             /*将秘密图片低四位移到高四位*/
104             ImgData2[i][j]=ImgData2[i][j]<<4;
105             /*提取载体图片*/
106             ImgData[i][j]=ImgData[i][j]&240;
107         }
108     }
109     /*将载体图片数据写入*/
110     fwrite(fh,sizeof(fileHeader),1,fpCov);
111     fwrite(fi,sizeof(fileInfo),1,fpCov);
112     fwrite(fq,sizeof(rgbq),256,fpCov);
113     for(i=0;i<fi->biHeight;i++)
114     {
115         for(j=0;j<(fi->biWidth+3)/4*4;j++)
116             fwrite(&ImgData[i][j],1,1,fpCov);
117     }
118     /*将秘密图片数据写入*/
119     fwrite(fh,sizeof(fileHeader),1,fpSec);
120     fwrite(fi,sizeof(fileInfo),1,fpSec);
121     fwrite(fq,sizeof(rgbq),256,fpSec);
122     for(i=0;i<fi->biHeight;i++)
123     {
124         for(j=0;j<(fi->biWidth+3)/4*4;j++)
125             fwrite(&ImgData2[i][j],1,1,fpSec);
126     }
127
128     free(fh);
129     free(fi);
130     free(fq);
131     fclose(fpCov);
132     fclose(fpSec);
133     fclose(fpSte);
134     printf("success\n");
135     return 0;
136 }

在RGB图片中隐藏图片

到此这次作业也就完成了,下面是额外搞的一个在RGB图中隐藏灰度图,因为不是作业,也就没写提取代码

  1 /*
  2 将一张图片隐藏到另一张图片中
  3 载体图为真彩图
  4 blog:http://www.cnblogs.com/wd1001/
  5 2015年6月5日16:06:16
  6 */
  7 #include<stdio.h>
  8 #include<malloc.h>
  9 #include<stdlib.h>
 10 /*
 11 位图头结构
 12 */
 13 #pragma pack(1)
 14 typedef struct tagBITMAPFILEHEADER
 15 {
 16     unsigned char bfType[2];//文件格式
 17     unsigned long bfSize;//文件大小
 18     unsigned short bfReserved1;//保留
 19     unsigned short bfReserved2;
 20     unsigned long bfOffBits; //DIB数据在文件中的偏移量
 21 }fileHeader;
 22 #pragma pack()
 23 /*
 24 位图数据信息结构
 25 */
 26 #pragma pack(1)
 27 typedef struct tagBITMAPINFOHEADER
 28 {
 29     unsigned long biSize;//该结构的大小
 30     long biWidth;//文件宽度
 31     long biHeight;//文件高度
 32     unsigned short biPlanes;//平面数
 33     unsigned short biBitCount;//颜色位数
 34     unsigned long biCompression;//压缩类型
 35     unsigned long biSizeImage;//DIB数据区大小
 36     long biXPixPerMeter;
 37     long biYPixPerMeter;
 38     unsigned long biClrUsed;//多少颜色索引表
 39     unsigned long biClrImporant;//多少重要颜色
 40 }fileInfo;
 41 #pragma pack()
 42 /*
 43 调色板结构
 44 */
 45 #pragma pack(1)
 46 typedef struct tagRGBQUAD
 47 {
 48     unsigned char rgbBlue; //蓝色分量亮度
 49     unsigned char rgbGreen;//绿色分量亮度
 50     unsigned char rgbRed;//红色分量亮度
 51     unsigned char rgbReserved;
 52 }rgbq;
 53 #pragma pack()
 54
 55 int main()
 56 {
 57     FILE * fpCov,* fpSec,*fpSte;
 58     int i,j,k;
 59     int h,m,l;//分别存储灰度图的高四位的2位、1位、1位
 60     unsigned char ImgData[300][300][3];
 61     unsigned char ImgData2[300][300];
 62
 63     fileHeader * fh,*fh2;
 64     fileInfo * fi,*fi2;
 65     rgbq * fq;
 66     if((fpCov=fopen("G:/vc6.0/work/3/2.bmp","rb"))==NULL)
 67     {
 68         printf("打开文件失败");
 69         exit(0);
 70     }
 71
 72     if((fpSec=fopen("G:/vc6.0/work/3/32.bmp","rb"))==NULL)
 73     {
 74         printf("打开文件失败");
 75         exit(0);
 76     }
 77     if((fpSte=fopen("G:/vc6.0/work/3/121.bmp","wb"))==NULL)
 78     {
 79         printf("创建文件失败");
 80         exit(0);
 81     }
 82     /*
 83     读取载体图片
 84     */
 85     fh=(fileHeader *)malloc(sizeof(fileHeader));
 86     fi=(fileInfo *)malloc(sizeof(fileInfo));
 87     fread(fh,sizeof(fileHeader),1,fpCov);
 88     fread(fi,sizeof(fileInfo),1,fpCov);
 89
 90     for(i=0;i<fi->biHeight;i++)
 91     {
 92         for(j=0;j<(fi->biWidth+3)/4*4;j++)
 93         {    for(k=0;k<3;k++)
 94                 fread(&ImgData[i][j][k],1,1,fpCov);
 95         }
 96     }
 97     /*读取秘密图片*/
 98     fh2=(fileHeader *)malloc(sizeof(fileHeader));
 99     fi2=(fileInfo *)malloc(sizeof(fileInfo));
100     fq=(rgbq *)malloc(sizeof(rgbq)*256);
101     fread(fh2,sizeof(fileHeader),1,fpSec);
102     fread(fi2,sizeof(fileInfo),1,fpSec);
103     fread(fq,sizeof(rgbq),256,fpSec);
104
105     for(i=0;i<fi->biHeight;i++)
106     {
107         for(j=0;j<(fi->biWidth+3)/4*4;j++)
108             fread(&ImgData2[i][j],1,1,fpSec);
109     }
110     /*隐藏图片*/
111     for(i=0;i<fi2->biHeight;i++)
112     {
113         for(j=0;j<(fi2->biWidth+3)/4*4;j++)
114         {
115             /*提取秘密图片高两位*/
116             h=ImgData2[i][j]&192;
117             h=h>>6;
118             /*提取秘密图片第6位*/
119             m=ImgData2[i][j]&32;
120             m=m>>5;
121             /*提取秘密图片第5位*/
122             l=ImgData2[i][j]&16;
123             l=l>>4;
124             for(k=0;k<3;k++)
125             {
126                 /*将秘密图片高两位隐藏到底2位*/
127                 if(k==0)
128                 {
129                     ImgData[i][j][k]=ImgData[i][j][k]&252;
130                     ImgData[i][j][k]+=h;
131                 }
132                 /*将秘密图片第6位隐藏到底1位*/
133                 else if(k==1)
134                 {
135                     ImgData[i][j][k]=ImgData[i][j][k]&254;
136                     ImgData[i][j][k]+=m;
137                 }
138                 /*将秘密图片第6位隐藏到底1位*/
139                 else
140                 {
141                     ImgData[i][j][k]=ImgData[i][j][k]&254;
142                     ImgData[i][j][k]+=l;
143                 }
144             }
145         }
146     }
147     /*将图片数据写入*/
148     fwrite(fh,sizeof(fileHeader),1,fpSte);
149     fwrite(fi,sizeof(fileInfo),1,fpSte);
150     for(i=0;i<fi->biHeight;i++)
151     {
152         for(j=0;j<(fi->biWidth+3)/4*4;j++)
153             for(k=0;k<3;k++)
154                 fwrite(&ImgData[i][j][k],1,1,fpSte);
155     }
156
157
158     free(fh);
159     free(fi);
160     free(fq);
161     fclose(fpCov);
162     fclose(fpSec);
163     fclose(fpSte);
164     printf("success\n");
165     return 0;
166 }
时间: 2024-12-25 01:07:26

在一张图片中隐藏另一张图片的相关文章

css sprite 调整大张图片中小图标的大小

直接说解决方法: 假设一张拼合好的大图大小是:900 x 1000 px (如上图) 现在想取图中左上角的河马图标,并缩小图标的大小. 正常取图: .sprite { background: url('imgs/woqu_localjoin_all.png') no-repeat -21px -80px; width: 190px; height: 154px; } 现在取正常图标大小的一半: <pre name="code" class="html">

MVC4 WebAPI中如何返回一张图片

public HttpResponseMessage Get(string imageName, int width, int height) { Image img = GetImage(imageName, width, height); MemoryStream ms = new MemoryStream(); img.Save(ms, System.Drawing.Imaging.ImageFormat.Png); HttpResponseMessage result = new Htt

语义分割(semantic segmentation) 常用神经网络介绍对比-FCN SegNet U-net DeconvNet,语义分割,简单来说就是给定一张图片,对图片中的每一个像素点进行分类;目标检测只有两类,目标和非目标,就是在一张图片中找到并用box标注出所有的目标.

from:https://blog.csdn.net/u012931582/article/details/70314859 2017年04月21日 14:54:10 阅读数:4369 前言 在这里,先介绍几个概念,也是图像处理当中的最常见任务. 语义分割(semantic segmentation) 目标检测(object detection) 目标识别(object recognition) 实例分割(instance segmentation) 语义分割 首先需要了解一下什么是语义分割(s

RPA中检测一张图片中是否含有人脸

想要检测一张图片中是否含有人脸,需要用到的关键技术就是人脸检测. 人脸检测算法的输入是一张图像,输出是人脸框的坐标序列,具体结果是 0 个人脸框或 1 个人脸框或多个人脸框. 人脸检测算法的原理简单来说是一个"扫描"加"判定"的过程.即首先在整个图像范围内扫描,再逐个判定候选区域是否为人脸的过程.因此人脸检测算法的计算速度会跟图像尺寸大小以及图像内容相关.在实际编写代码时,我们可以通过设置"输入图像尺寸".或"最小脸尺寸限制"

Android中隐藏顶部状态栏的那些坑

Android中隐藏顶部状态栏的那些坑 先看看常规的隐藏状态栏的方法: 方法一: @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //去除title requestWindowFeature(Window.FEATURE_NO_TITLE); //去掉Activity上面的状态栏 getWindow().setFlags(WindowManager

循环滚动scrollView---最后一张图片后面紧跟着第一张图片,第一张图片前面挨着最后一张图片

问题描述:循环滚动scrollView---最后一张图片后面紧跟着第一张图片,第一张图片前面挨着最后一张图片,形成环,循环切换图片. 效果图如下: 具体代码如下: //  ViewController.m #import "ViewController.h" #define kW 375 #define kH 500 #define kCount 11 @interface ViewController () <UIScrollViewDelegate> @end @imp

c# 中面相对性的三个特点:封装,继承,多态, 以及c#中隐藏(new)和方法重写(override)和重载(overload)的区别

封装 1)封装原则:将不需要对外提供的内容都隐藏起来,把属性都隐藏,提供公共方法对其访问,通常有两种访问方式:set 设置,get 获取. 2)封装结果:存在但是不可见. 3) 访问修饰符 声明的可访问性                                 含义 public                                    访问不受限制. protected                              访问仅限于本类或者其子类(可以跨程序集). p

C# 类中隐藏基类方法和Partial

原文:C# 类中隐藏基类方法和Partial 今天对于.NET开发人员来说最开心的事情莫过于微软搞开源了,这觉得是给搞.NET开发的长脸.虽然我是一个初学者,这无疑给我极大的学习动力.Fighting!!! 当一个类从父类继承了一个成员时,也就继承了它的执行代码,如果成员时虚拟的,我们可以用override重写这段执行代码.但无论他是否是虚拟的,都可以通过new 关键字来隐藏它.例如: public class BaseClass { public void DoSomething() { //

Tips6:用[HideInInspector]在Inspector中隐藏变量

你曾想要把某些公有变量在Inspetor面板中隐藏起来吗,这样很简单就能做到. 让我们来看以下代码: 1 using UnityEngine; 2 3 public class HidingScript : MonoBehaviour { 4 5 public int variableThatNeedsToBeHidden = 100; 6 7 public int visibleVariable = 0; 8 } 可以看到这里Public 出的变量都显示出来了,要想让Public修饰的变量不在