作者joehuang92 (++红色世界++)
看板b95902HW
标题Re: [作业] 钢弹
时间Sat Nov 4 00:50:46 2006
帮忙整理一下题目的意思...
作业的目的是要将图片作一些特殊的处理,Input是任意一张(24bit)bmp点阵图
而Output则是两张处理过的图片,一张是高斯模糊效果的,另一张则是轮廓线。
先说明一下前面的Code...
#include <stdio.h>
#include "bmp.h" /*助教给的headfile,放在code同一个资料夹就可*/
int main(void)
{
unsigned char *bytes; /*接图的指标变数*/
BITMAPINFO *info; //file header /*图片标头档的变数*/
int height; /*图片高变数*/
int width; /*图片宽变数*/
bytes=LoadDIBitmap("red.bmp", &info); /*读入red.bmp,将标头档存入info*/
height=info->bmiHeader.biHeight; /*取得图片高(单位pixel)*/
width=info->bmiHeader.biWidth; /*取得图片宽(单位pixel)*/
/*在这里做处理*/
SaveDIBitmap("out.bmp", info, bytes); /*把图存回去*/
return (0);
}
题目的架构是把图片分割成很多方格,宽width格,高height格,每格都代表图片的
一个像素。从左下角向右数,分别为bytes[0],bytes[1],bytes[2]...,一列数完就
往上继续数,最後一格(最右上角)应该会是bytes[height*width-1]。因为助教的帮忙
,图片一进来就会是黑白的,每个bytes[i]会有一个0~255的值,由黑到白的灰阶。
要把图高斯模糊化,就把题目给定的矩阵M,中心的41对准任意一个像素,整个5X5的
矩阵应该会涵盖以指定像素为中心的5X5方格(如果矩阵超过了图片,把该处的颜色值
0)。大约会是类似的状况:
000000000000000000000000
000000000000000000000000
00■■■■■■■■■■■■■■■■■■■■00
00■■■■■■■■■■■■■■■■■■■■00
00■■■□□□□□■■■■■■■■■■■■00
00■■■□□□□□■■■■■■■■■■■■00
00■■■□□☆□□■■■■■■■■■■■■00
00■■■□□□□□■■■■■■■■■■■■00
00■■■□□□□□■■■■■■■■■□□□□□ ☆为指定的像素
00■■■■■■■■■■■■■■■■■□□□□□ □范围是m矩阵
00■■■■■■■■■■■■■■■■■□□☆□□ ■范围是图像素
00■■■■■■■■■■■■■■■■■□□□□□ 0是矩阵可能超出的范围
00■■■■■■■■■■■■■■■■■□□□□□
00■■■■■■■□□□□□■■■■■■■■00
00■■■■■■■□□□□□■■■■■■■■00
00■■■■■■■□□☆□□■■■■■■■■00
00■■■■■■■□□□□□■■■■■■■■00
000000000□□□□□0000000000
000000000000000000000000
对每个像素,将其涵盖范围的数值,分别乘以盖上去矩阵的对应数值,并将其加总。
最後把加总的数值除以273,存回原来的指定像素里。
如此,最後出来的图应该会跟原来差不多但是比较模糊化。
成功的话,将其输出成第一个成品。
然後,比较原图根模糊化的图,如果两图某像素的颜色值相差超过10,就把那个像素
的值改为255(白色),否则把值改为0(黑色)。
出来的成果应该会变成一张轮廓化的图,黑底白线。
如果看不懂我说的东西可以私下敲我XD,祝大家周末钢弹愉快。
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 59.121.8.237
1F:推 jackychc:推荐这篇文章 11/04 01:55
2F:推 huichih:谢谢 11/04 10:41
3F:→ kevintpd:强者我同学 11/04 15:12
4F:推 locationc:范例中是哪个步骤将图转成灰阶的? 11/04 21:21
5F:推 joehuang92:把图读进来的时候...(听说是这样) 11/04 21:40
6F:推 waterwinds:大推~同学你真是太让人感动了>///< 11/05 11:31
7F:推 NTUSTKnight:TA豋场了吗? 11/06 23:26
8F:推 fieryl:TA!? 难道我刚刚问的人是TA!? Orz 11/06 23:29