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 file converter 转换格式失败 报错 Error marking filters as finished,如何解决?
  • ¥15 ubuntu系统下挂载磁盘上执行./提示权限不够
  • ¥15 Arcgis相交分析无法绘制一个或多个图形
  • ¥15 关于#r语言#的问题:差异分析前数据准备,报错Error in data[, sampleName1] : subscript out of bounds请问怎么解决呀以下是全部代码:
  • ¥15 seatunnel-web使用SQL组件时候后台报错,无法找到表格
  • ¥15 fpga自动售货机数码管(相关搜索:数字时钟)
  • ¥15 用前端向数据库插入数据,通过debug发现数据能走到后端,但是放行之后就会提示错误
  • ¥30 3天&7天&&15天&销量如何统计同一行
  • ¥30 帮我写一段可以读取LD2450数据并计算距离的Arduino代码
  • ¥15 飞机曲面部件如机翼,壁板等具体的孔位模型