灰度图膨胀。图像的宽度和高度不变。
简单情况
下面创建一个3*3的灰度图,左上角为1,右下角为3,其它为0。
byte[] barr = new byte[9];
barr[0] = 1;
barr[8] = 3;
var img = WHCSHalCon.Base.CreateByteImage(barr, 3);
HOperatorSet.GrayDilationRect(img, out img, 2, 2);
HTuple widht, height;
HOperatorSet.GetImageSize(img, out widht, out height);
HObject region;
HOperatorSet.Threshold(img, out region, 1, 1);
HTuple rows, cols;
HOperatorSet.GetRegionPoints(region, out rows, out cols);
var area = WHCSHalCon.Base.Area(region);
运行结果:
灰度为1的点三个 (0,0),(0,1),(1,0)
HOperatorSet.Threshold(img, out region, 3, 3);
灰度为3的点四个:(1,1),(1,2),(2,1),(2,2)
覆盖左上?
会不会是右上覆盖左上?
barr[0] = 3;
barr[8] = 1;
灰度为3的点四个(0,0) (0,1) (1,1),(1,2)
灰度为1的点三个(1,2) (2,1) (2,2)
中间的点可能被左上角覆盖,也可能被右下角覆盖。
结论及验证
查了官方英文资料,加上自己的测试:
各点的灰度 取 以自己为中中心,宽为maskWidth*2-1,高为ma0skHeight*2-1的矩形内的最大灰度值。
下面来测试。
创建一个5*5的灰度图,中间3*3灰度为0,其它为1。看2*2的坐标灰度是多少?
byte[] barr = new byte[25];
for(int i = 0; i < 5; i++ )
{
for(int j = 0; j < 5; j++ )
{
barr[5 * i + j] = (0 == i * j * (i - 4) * (j - 4)) ? (byte)1 : (byte)0;
}
}
var img = WHCSHalCon.Base.CreateByteImage(barr, 5);
HOperatorSet.GrayDilationRect(img, out img, 2, 2);
HObject regionCenter;
HOperatorSet.GenRectangle1(out regionCenter, 2, 2, 2, 2);
HTuple tMean, tmp;
HOperatorSet.Intensity(regionCenter, img, out tMean, out tmp);
tMean为0
中间3*3任意一格的灰度设置成1,则(2,2)的灰度变成1。
byte[] barr = new byte[25];
for(int i = 0; i < 5; i++ )
{
for(int j = 0; j < 5; j++ )
{
barr[5 * i + j] = (0 == i * j * (i - 4) * (j - 4)) ? (byte)1 : (byte)0;
}
}
barr[5 * 1 + 1] = 1;
var img = WHCSHalCon.Base.CreateByteImage(barr, 5);
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
2021-08-11 CFile类