图像处理-请教:请问如何把一个多边形区域像素化?

问题描述

请教:请问如何把一个多边形区域像素化?

把这些像素的值存到数组里,多边形内部元素值为1,外部为0。谢谢了!

解决方案

如何判断点是否在一个不规则的多边形区域内?

解决方案二:

这还不简单么,循环遍历这个数组,根据下标等比例算出坐标,根据坐标计算它在多边形内还是外,然后设置0和1。
判断是否在多边形内,可以取多边形内一点和这一点得到直线方程,如果有奇数个解,就在内部,否则在外部。

解决方案三:

调用API函数,获取像素值。存于数组, 循环读取就行呀

解决方案四:

long CVectorToGrid::RegionNumber(int regionx,int regiony)
{
return (long)regiony*Cols+regionx;
}
int CVectorToGrid::RealRegionX(double X)
{
return (X-FullExtent.Left)/CellSize;
}
int CVectorToGrid::RealRegionY(double Y)
{
return (FullExtent.Top-Y)/CellSize;
}
int CVectorToGrid::RegionX(double X)
{
int x=(X-FullExtent.Left)/CellSize;
if(x
x=0;
else if(x>=Cols)
x=Cols-1;
return x;
}
int CVectorToGrid::RegionY(double Y)
{
int y=(FullExtent.Top-Y)/CellSize;
if(y
y=0;
else if(y>=Rows)
y=Rows-1;
return y;
}
void CVectorToGrid::ConvertRing(IPoints*pnts,IMemFourValueArray*pArray)
{
double XMin,YMin,XMax,YMax;
IEnvelope*ext;
pnts->get_Envelope(&ext);
ext->GetCoord(&XMin,&YMax,&XMax,&YMin);
ext->Release();
int RegionX1=RealRegionX(XMin);
int RegionY1=RealRegionY(YMax);
int RegionX2=RealRegionX(XMax);
int RegionY2=RealRegionY(YMin);
double X1,Y1,X2,Y2;
long RegionN;
int rx1,rx2,ry1,ry2,j,min;
LONG ptCount;
pnts->get_Count(&ptCount);
if(ptCount
pnts->GetItem(0,&X1,&Y1);
rx1=RealRegionX(X1);ry1=RealRegionY(Y1);
double InterX;
double centery;
double lx=FullExtent.Left+CellSize*RegionX1;
double rx=FullExtent.Left+CellSize*(RegionX2+1);
int leftr;
int FormerY;
int FormerDeri=0;
bool IsIntersect;
int V;
float fV;
for(long k=1;k
{
if(k==ptCount-1)
pnts->GetItem(0,&X2,&Y2);
else
pnts->GetItem(k,&X2,&Y2);
rx2=RealRegionX(X2);ry2=RealRegionY(Y2);
if(Y1>Y2)
{
if((FormerDeri==1)&&(FormerY>=ry1)) ry1=FormerY+1;
double r=(X2-X1)/(Y2-Y1);
for(int p=ry1;p<=ry2;p++)
{
centery=FullExtent.Top-CellSize/2-p*CellSize;
IsIntersect=false;
if((centery>=Y2-DifFuzzy)&&(centery<=Y1+DifFuzzy))
{
FormerY=p;
FormerDeri=1;
IsIntersect=true;
InterX=r*(centery-Y1)+X1;
}
if((IsIntersect)&&(p>=0)&&(p<=Rows-1))
{
leftr=RealRegionX(InterX);
if(InterX>FullExtent.Left+CellSize/2+CellSize*leftr)
{
leftr++;
}
if(leftr>0)
{
RegionN=RegionNumber(max(RegionX1,0),p);
min=min(leftr,Cols);
for(j=max(RegionX1,0);j
{
pArray->get_ValueAsFloat(RegionN,&fV);
V=(int)fV-1;
if(V
pArray->put_ValueAsFloat(RegionN,V);
RegionN++;
}
}
if(leftr
if(leftr
{
RegionN=RegionNumber(leftr,p);
min=min(RegionX2,Cols-1);
for(j=leftr;j
{
pArray->get_ValueAsFloat(RegionN,&fV);
V=(int)fV+1;
if(V>3) V-=4;
pArray->put_ValueAsFloat(RegionN,V);
RegionN++;
}
}
}
}
}
else if(Y1
{
if((FormerDeri==-1)&&(FormerY
double r=(X2-X1)/(Y2-Y1);
for(int p=ry1;p>=ry2;p--)
{
centery=FullExtent.Top-CellSize/2-p*CellSize;
IsIntersect=false;
if((centery>=Y1-DifFuzzy)&&(centery<=Y2+DifFuzzy))
{
FormerY=p;
FormerDeri=-1;
IsIntersect=true;
InterX=r*(centery-Y1)+X1;
}
if((IsIntersect)&&(p>=0)&&(p<=Rows-1))
{
leftr=RealRegionX(InterX);
if(InterX>FullExtent.Left+CellSize/2+CellSize*leftr)
{
leftr++;
}
if(leftr>0)
{
RegionN=RegionNumber(max(RegionX1,0),p);
min=min(leftr,Cols);
for(j=max(RegionX1,0);j
{
pArray->get_ValueAsFloat(RegionN,&fV);
V=(int)fV+1;
if(V>3) V-=4;
pArray->put_ValueAsFloat(RegionN,V);
RegionN++;
}
}
if(leftr
if(leftr
{
RegionN=RegionNumber(leftr,p);
min=min(RegionX2,Cols-1);
for(j=leftr;j
{
pArray->get_ValueAsFloat(RegionN,&fV);
V=(int)fV-1;
if(V
pArray->put_ValueAsFloat(RegionN,V);
RegionN++;
}
}
}
}
}
X1=X2;Y1=Y2;
rx1=rx2;ry1=ry2;
}
}

时间: 2024-11-22 16:17:37

图像处理-请教:请问如何把一个多边形区域像素化?的相关文章

3dmax插件 下载 模板-请教技术大牛们一个关于3dmax二次开发的问题

问题描述 请教技术大牛们一个关于3dmax二次开发的问题 做一个3dmax的插件,将浏览器中的超链接拖动到3dmax中(其中包括鼠标的点击.拖动.按下),然后3dmax会自动把链接中的内容(已经做好的模型.图片.位图)下载下来,将这些内容作为模板加载到3dmax中.请问实现这样的功能流程是什么?怎么去入手呢?可行性是怎样的? 解决方案 参考:http://docs.autodesk.com/3DSMAX/15/ENU/3ds-Max-SDK-Programmer-Guide/index.html

求VS2005+MapInfo设置多边形区域源码

问题描述 各位大虾们,小弟初学MapInfo,对很多操作都不熟悉,所以想请各位给我一个源码参考一下.另外我还有一个疑问就是,我原先查看帮助当中的C++示例,然后根据里面写的时候报了很多错误,下面的是其中几个:1.错误3"MapXLib.CMapXFeature"并不包含"CreateDispatch"的定义2.错误2"MapXLib.CMapXPoints"并不包含"AttachDispatch"的定义3.错误4"M

大侠们,请问如何制作一个文档管理工具,大体就是对文档进行分类,搜索。感谢!

问题描述 大侠们,请问如何制作一个文档管理工具,大体就是对文档进行分类,搜索.感谢!我是一个文字工作IT盲,但是想干点事.现在手上有公司几年的各种文档.都是WORD电子版的.有时要查找一些文档记录好难,要一个一个打开.可不可以制作一个工具或一个平台,搜索一下,就会出现.如我按年份搜,它就会出现搜索年份的1.*年*月**会议**内容2.*年*月**会议**内容等等,按会议名称搜,也会出现搜索会议的1.*年*月**会议**内容2.*年*月**会议**内容等等.请大侠请教,感激不尽.....对了,我不

r语言-请教R语言的一个数据统计问题

问题描述 请教R语言的一个数据统计问题 一个数据集中,包含"月份","手机号码"等字段.数据中包含多个月,且每个月有些手机号码会重复出现.现在想在原数据集增加一个字段"当月重复出现次数",等于[每条记录中手机号码在当月出现次数].请问在R中如何实现?谢谢! 解决方案 <项目一>请教一个关于获取post json数据的问题

MFC 用gdi绘制填充多边形区域

MFC 用gdi绘制填充多边形区域 这里的代码是实现一个三角形的绘制,并用刷子填充颜色 在OnPaint()函数里面 运用的是给定的三角形的三个点,很多个点可以绘制多边形 [cpp] view plaincopy   CBrush br(RGB(40,130,170));   CRgn rgn;   CPoint arrpt[3];   arrpt[0].x = m_rcAT.right-8;   arrpt[0].y = m_rcAT.top+m_rcAT.Height()*2/5;   ar

php+mongodb判断坐标是否在指定多边形区域内的实例_php实例

MongoDB是一个基于分布式文件存储的数据库,并提供创建基于地理空间的索引的能力,本文将提供使用PHP连接mongodb,判断坐标是否在指定多边形区域内的实例. 1.定义多边形区域 多边形的坐标点如下: 113.314882,23.163055 113.355845,23.167042 113.370289,23.149564 113.356779,23.129758 113.338238,23.13913 113.330979,23.124706 113.313588,23.140858 1

VS2005+MapInfo设置多边形区域

问题描述 各位大哥大姐们好,我初学MapInfo,想请教一下,如何用代码实现设置多边形区域(C#) 解决方案 解决方案二:使用了CreateCustomTool方法创建polytool工具,然后根据这个去设置多边形区域,联机帮助和<MapX参考指南>中会对该对象给出解释,具体的代码实现自己写写吧!解决方案三:这是联机帮助里的部分示例代码:constshortCUSTOM_POLYGON_TOOL=42;constshortCUSTOM_POLYLINE_TOOL=43;if(Flags==mi

php+mongodb判断坐标是否在指定多边形区域内的实例

MongoDB是一个基于分布式文件存储的数据库,并提供创建基于地理空间的索引的能力,本文将提供使用PHP连接mongodb,判断坐标是否在指定多边形区域内的实例. 1.定义多边形区域 多边形的坐标点如下: 113.314882,23.163055 113.355845,23.167042 113.370289,23.149564 113.356779,23.129758 113.338238,23.13913 113.330979,23.124706 113.313588,23.140858 1

通讯录-新手请教大神们一个问题。

问题描述 新手请教大神们一个问题. 刚学习android,想做一个关于短信的小应用,我想在通讯录获得联系人,但是不是获得一个联系人,也不是全部的,就想调用那个短信群发的时候会跳转到的可以多选联系人界面上,如果是普通的通讯录我会调用: Intent intent = new Intent(Intent.ACTION_PICK ContactsContract.Contacts.CONTENT_URI); 但是调用那个多选联系人的通讯录界面我就不会了.百度也没找到有关的资料,所以请教一下各位大神!谢