C_and_CPP 板


LINE

※ 引述《ioioioioioio (讨战是兴趣)》之铭言: : ※ 引述《waquey (请支持3/27"花蝴蝶")》之铭言: : : As title : : 如果我今天可以知道一张图的 Height 跟 width : : 然後一个一个去撷取它的pixel值 : : 要怎麽宣告阵列 : : new DWORD[][]!? (里面想放Height跟width 可是都会有错) : : 有试过给定很大的数字 Ex: int src[4000][4000] : : 但似乎不是一个很好的方法 : : 还有就是一个图的pixel值都很大 : : 用dword阵列的储存方法对吗? : unsigned char *data = NULL; : //RGB data : data = (unsigned char *)malloc(sizeof(unsigned char) * height * width * 3); : //use for-loop : *(data + (i * width + j) * 3 + 2) = R; : *(data + (i * width + j) * 3 + 1) = G; : *(data + (i * width + j) * 3 + 0) = B; : 我是这样做的 有错请高手指正~ 这样做会多做很多乘法 假设wh=320 240 当i=0的时候,要取第一个row的所有值(j=0~320) 则必须每个点都做一次i*w的运算,但实际上乘一次就好 既然是影像处理,我就用简单的灰阶来举例 #define unsigned char BYTE #define W 320 #define H 240 #define BPP 3 //bytes per pixel (3 => R,G,B) 方法一 宣告动态三维阵列,方便使用,但三维动态空间读取速度较慢 int i,j; //create buffer BYTE ***image = new BYTE**[H] for(i=0; i<H; i++) image[i] = new BYTE*[W]; for(i=0; i<H; i++) for(j=0; j<W; j++) image[i][j] = new BYTE[BPP]; get_image_source(image); //processing for(i=0; i<H; i++) for(j=0; j<W; j++) image[i][j][0] = image[i][j][1] = image[i][j][2] = (image[i][j][0] + image[i][j][1] + image[i][j][2]) / 3 ; 方法二 宣告一维连续记忆体,使用公式找到pixel位置,演算复杂时撰写复杂,大量乘法增加负担 #define GetR(i,j) ((i*W+j)*BPP+2) #define GetG(i,j) ((i*W+j)*BPP+1) #define GetB(i,j) ((i*W+j)*BPP+0) int i,j; //create buffer BYTE *image = new BYTE[H * W * BPP] get_image_source(image); ////processing for(i=0; i<H; i++) for(j=0; j<W; j++) image[GetB(i,j)] = image[GetG(i,j)] = image[GetR(i,j)] = (image[GetB(i,j)] + image[GetG(i,j)] + image[GetR(i,j)]) / 3 ; 方法三 宣告一维阵列,使用指标,使用加法取代乘法 int i,j; int EffW = W * BPP; //create buffer BYTE *image = new BYTE[H * W * BPP]; get_image_source(image); //processing BYTE *p_image = image; for(i=0; i<H; i++, p_image+=EffW) for(j=0,k=0; j<W; j++,k+=BPP) p_image[k] = p_image[k+1] = p_image[k+2] = (p_image[k] + p_image[k+1] + p_image[k+2]) / 3 ; 给大家参考一下~ --



※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 118.169.51.217
1F:→ pizza0117:忘了提一下.我是推荐用方法三~ 11/06 10:52
2F:推 waquey:谢谢 11/06 11:55







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:Soft_Job站内搜寻

TOP