点击打开链接

图像有用区域

时间限制:3000 ms  |  内存限制:65535 KB
难度:4
描述

“ACKing”同学以前做一个图像处理的项目时,遇到了一个问题,他需要摘取出图片中某个黑色线圏成的区域以内的图片,现在请你来帮助他完成第一步,把黑色线圏外的区域全部变为黑色。

     

图1                                                        图2

已知黑线各处不会出现交叉(如图2),并且,除了黑线上的点外,图像中没有纯黑色(即像素为0的点)。

输入
第一行输入测试数据的组数N(0<N<=6)

每组测试数据的第一行是两个个整数W,H分表表示图片的宽度和高度(3<=W<=1440,3<=H<=960)

随后的H行,每行有W个正整数,表示该点的像素值。(像素值都在0到255之间,0表示黑色,255表示白色)
输出
以矩阵形式输出把黑色框之外的区域变黑之后的图像中各点的像素值。
样例输入
1
5 5
100 253 214 146 120
123 0 0 0 0
54 0 33 47 0
255 0 0 78 0
14 11 0 0 0
样例输出
0 0 0 0 0
0 0 0 0 0
0 0 33 47 0
0 0 0 78 0
0 0 0 0 0
典型的搜索题,我不知道别人怎么解决的,我是用了很朴素的办法,就是找图形的上下左右四个边界上的非0点,如果找到一个,就从这个点开始广搜,直到边上都为0,那么剩下的点就是截取的区域
#include<stdio.h>
#include<string.h>
int map[970][1450];
int queue[1384801][2];
int head , tail;
int x , y;
int start_x , start_y;
void step(int a, int b)
{
if(a > 0 && map[a - 1][b] != 0 )//&& haxi[a - 1][b] == 0)
{
map[a - 1][b] = 0;
queue[tail][0] = a -1;
queue[tail++][1] = b;
}
if(a < x - 1 && map[a + 1][b] != 0)// && haxi[a + 1][b] == 0)
{
map[a + 1][b] = 0;
queue[tail][0] = a +1;
queue[tail ++][1] = b;
}
if(b > 0 && map[a][b - 1] != 0 )//&& haxi[a][b - 1] == 0)
{
map[a][b - 1] = 0;
queue[tail][0] = a;
queue[tail++][1] = b - 1;
}
if(b < y - 1 && map[a][b + 1] != 0 )//&& haxi[a][b + 1] == 0)
{
map[a][b + 1] = 0;
queue[tail][0] = a;
queue[tail++][1] = b + 1;
}
}
int search_point()
{
int i ;
for(i = 0 ; i < x ; i++)
{
if(map[i][0] != 0)
{
start_x = i;
start_y = 0;
break;
}
if(map[i][y - 1] != 0)
{
start_x = i;
start_y = y - 1;
break;
}
}
if(i == x) //×óÓÒûÕÒµ½ÔÙÕÒÉÏϱ߽ç
{
for(i = 0 ; i < y ; i++)
{
if(map[0][i] != 0)
{
start_x = 0;
start_y = i;
break;
}
if(map[x - 1][i] != 0)
{
start_x = x - 1;
start_y = i;
break;
}
}
if(i == y)
return 0;
}
head = 0;
tail = 1;
queue[head][0] = start_x;
queue[head][1] = start_y;
map[start_x][start_y] = 0;
for( ; head != tail ; head++)
{
step(queue[head][0] , queue[head][1]);
}
return 1;
} int main()
{
int i , j , k;
int flag; scanf("%d" , &k);
while(k--)
{
scanf("%d %d" , &y , &x);
flag = 0;
for(i = 0 ; i < x ; i++)
{
for(j = 0 ; j < y ; j++)
{
scanf("%d" , &map[i][j]);
if(map[i][j] == 0)
flag =1;
} }
if(flag == 1)
while(search_point() != 0);
for(i = 0 ; i < x ; i++)
{
for(j = 0 ; j < y ; j++)
{
printf("%d " , map[i][j]);
}
printf("\n");
}
}
return 0;
}

nyoj 92 图像有用区域的更多相关文章

  1. ACM 图像有用区域

    图像有用区域 时间限制:3000 ms  |  内存限制:65535 KB 难度:4   描述 “ACKing”同学以前做一个图像处理的项目时,遇到了一个问题,他需要摘取出图片中某个黑色线圏成的区域以 ...

  2. nyoj 92-图像有用区域 (BFS)

    92-图像有用区域 内存限制:64MB 时间限制:3000ms 特判: No 通过数:4 提交数:12 难度:4 题目描述: “ACKing”同学以前做一个图像处理的项目时,遇到了一个问题,他需要摘取 ...

  3. nyoj--92--图像有用区域(模拟)

    图像有用区域 时间限制:3000 ms  |  内存限制:65535 KB 难度:4 描述 "ACKing"同学以前做一个图像处理的项目时,遇到了一个问题,他需要摘取出图片中某个黑 ...

  4. NYOJ92 图像实用区域 【BFS】

    碰到了一个曾经从未见过的奇怪问题:先上截图: 执行号 用户 题目 结果 时间 内存 语言 提交时间 895360 userid=%E9%95%BF%E6%9C%A8" style=" ...

  5. 四种简单的图像显著性区域特征提取方法-----AC/HC/LC/FT。

    四种简单的图像显著性区域特征提取方法-----> AC/HC/LC/FT. 分类: 图像处理 2014-08-03 12:40 4088人阅读 评论(4) 收藏 举报 salient regio ...

  6. 简单的图像显著性区域特征提取方法-----opencv实现LC,AC,FT

    https://blog.csdn.net/cai13160674275/article/details/72991049?locationNum=7&fps=1 四种简单的图像显著性区域特征 ...

  7. nyoj 92 图片实用面积【bfs】

    图像实用区域 时间限制:3000 ms  |  内存限制:65535 KB 难度:4 描写叙述 "ACKing"同学曾经做一个图像处理的项目时.遇到了一个问题,他须要摘取出图片中某 ...

  8. 利用flash精确定位asp.net的图像热点区域

    Asp.net的热点区域控件非常有用,但是对于热点区域如何精确定位,设定矩形,圆和多边形要素点的位置,用flash能够精确定位,在flash中制作热点区域的部分,可以是矩形,图形或者文字,然后对于这部 ...

  9. 根据序列图像聚焦区域获取深度 Shape From Focus

    最为超新新新新鸟...我也不知道第一篇文章应该写什么..所以,把自己最近正在研究的东西报一下吧, 研究的东西其实也不算深奥,就是对一个图像序列中的每张图像进行检测,发现每张图片的聚焦清晰区域,找到这个 ...

随机推荐

  1. windows下android环境的搭建:完成后添加android其他版本

    JDK: jdk-6u10-rc2-bin-b32-windows-i586-p-12_sep_2008.exe Eclipse:Eclipse3.7.1 Android sdk:android-sd ...

  2. 数据接口管理工具 thx RAP

    RAP是数据接口管理工具.在开发时前端将请求转至RAP,由RAP提供模拟数据:而后端使用RAP测试接口的正确性.这样RAP就成为了开发过程中的强 依赖,进而确保接口文档的实时正确性.RAP采用JSON ...

  3. Reporting Service 报表报 rsReportServerDatabaseError 错的解决方法

    一.打开CRM的报表出现“报表服务器数据库内出错.此错误可能是因连接失败.超时或数据库中磁盘空间不足而导致的. (rsReportServerDatabaseError) 获取联机帮助 对象名 'Re ...

  4. Jfinal基础学习(一)

    我负责的项目都是Jfinal的了,有必要写一些学习知识,记录下来. 1.PropKit.use("config.txt", "UTF-8"); PropKit ...

  5. C#动态数组ArrayList和List<T>的比较

    C#中一维动态数组(即列表)分ArrayList和List<T>两种,其容量可随着我们的需要自动进行扩充 一.ArrayList类(少用) ArrayList位于System.Collec ...

  6. mysql中一对一,一对多,多对多关系

    打个比方吧一个班级有很多学生,他们分别有不同的学号.一个学生对应一个学号,一个学号对应一个学生:这里学生和学号的关系就是一对一.一个班级有很多学生,这个班级只有一个班主任.一个班主任对应多个学生,多个 ...

  7. 请使用GameBench.jar 文件启动 GameBench服务

    请使用GameBench.jar 文件启动 GameBench服务 电脑上安装JAVA JRE:http://www.oracle.com/technetwork/java/javase/downlo ...

  8. Android手机平板两不误,使用Fragment实现兼容手机和平板的程序

    转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/8744943 记得我之前参与开发过一个华为的项目,要求程序可以支持好几种终端设备,其 ...

  9. Python基础教程【读书笔记】 - 2016/7/7

    希望通过博客园持续的更新,分享和记录Python基础知识到高级应用的点点滴滴! 第四波:第5章  条件.循环和其他语句 [总览]  深入介绍条件语句和循环语句,随后会看到列表推导式如何扮演循环和条件语 ...

  10. bzoj1382: [Baltic2001]Mars Maps

    Description 给出N个矩形,N<=10000.其坐标不超过10^9.求其面积并 Input 先给出一个数字N,代表有N个矩形. 接下来N行,每行四个数,代表矩形的坐标. Output ...