gzrjzcx 2016-05-07 15:14 采纳率: 0%
浏览 2454

c语言以二进制读取图片问题

小弟新手刚学数字图像处理,现在需要做一个模板卷积
程序编完了 但是对图片的处理总是不对
我把图片不做模板卷积只是读进去在存出来,发现图片已经变化了。
但是查了很久fread函数和fwrite函数,不知道哪里错了

大神们求拯救帮忙看看
程序很简单
define的想法就是用一维数组表示二维数组

#include
using namespace std;

#define Twoto1(i,j,w) i*w+j

void createimage(unsigned char *&img, int w, int h)
{img = new unsigned char[w*h];}

void delateimage(unsigned char*img)
{delete []img;}

void readimage(unsigned char*img, int w, int h, char *fname)
{
FILE *fp;
fopen_s(&fp,fname, "rb");
if (fp == NULL){ cout << "error" << endl; return; }
size_t result;
result=fread(img , sizeof(unsigned char), w*h, fp);
if (result != w*h)
{
cout << "Reading error" << endl;
return;
}
else
cout << "Reading Ok!" << endl;

fclose(fp);

}

void mobanjuanji(unsigned char image, unsigned char*image1, int w, int h, float moban[5][5])
{
for (int i = 0; i for (int j = 0; j if (iw - 3 || j>h - 3)
image1[Twoto1(i,j,w)] = 0;
else
{
float temp = 0;
for (int m = 0; m<5; m++)
for (int n = 0; n<5; n++)
{
temp += (image[Twoto1(i-2+m,j-2+n,w)]
moban[m][n]);

                }
            if (temp>255) image1[Twoto1(i, j, w)] = 255;
            else if (temp<0) image1[Twoto1(i, j, w)] = 0;
            else image1[Twoto1(i, j, w)] = temp;
        }

}

void saveimage(unsigned char *img, int w, int h, char *fname)
{
FILE *fp;
fopen_s(&fp, fname, "wb");
if (fp == NULL) { cout << "error" << endl; return; }
size_t result;
result = fwrite(img, sizeof(unsigned char), w*h, fp);
if (result != w*h)
{
cout << "Write error" << endl;
return;
}
else
cout << "Write Ok!" << endl;
fclose(fp);

}

void main()
{
unsigned char *img;
unsigned char *img1;
float moban[5][5] = { {0,0,0,0,0},{0, -1, 0, 1, 0 }, { 0, -2, 0, 2, 0 }, { 0, -1, 0, 1, 0 }, { 0,0,0,0,0 } };
//float moban[5][5] = { 0 };
int w = 512, h = 512;
createimage(img, w, h);
createimage(img1, w, h);
readimage(img, w, h, "E:\ss.raw");
mobanjuanji(img, img1,w, h, moban);
saveimage(img, w, h, "E:\ss_1.raw");
saveimage(img1, w, h, "E:\ss_2.raw");
delateimage(img);
delateimage(img1);
}
原图
直接读取不做卷积直接输出得到的图片
做卷积得到的图片

第一张是原图
第二张是直接读进去不作处理存出来
第三张是做卷积过后
可以看到貌似不做处理直接读出来 图片也是和原来不一样了- -
求帮忙看看呀

谢谢大家

  • 写回答

3条回答

  • shangguanwaner 2016-05-07 19:58
    关注

    你得考虑到原图片的格式。按你代码的意思,是Raw格式的,那一个像素占用的空间,不一定是你代码中假定1个字节哦。
    原图是彩色的,可以肯定的说,绝对不会是一个像素占用一个字节。
    所以,读取像素这一步就错了。

    评论

报告相同问题?

悬赏问题

  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 LiBeAs的带隙等于0.997eV,计算阴离子的N和P
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘
  • ¥15 来真人,不要ai!matlab有关常微分方程的问题求解决,
  • ¥15 perl MISA分析p3_in脚本出错
  • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
  • ¥15 ubuntu虚拟机打包apk错误
  • ¥199 rust编程架构设计的方案 有偿
  • ¥15 回答4f系统的像差计算