当前位置: 首页> 娱乐> 明星 > 泉州企业建站程序_宁波靠谱的网站推广公司_投稿网站_郑州seo优化外包

泉州企业建站程序_宁波靠谱的网站推广公司_投稿网站_郑州seo优化外包

时间:2025/7/10 4:18:26来源:https://blog.csdn.net/u014381782/article/details/142833564 浏览次数:0次
泉州企业建站程序_宁波靠谱的网站推广公司_投稿网站_郑州seo优化外包

package mainimport ("errors""fmt""strconv""strings"
)type point struct {x     inty     intvalue int
}type image struct {w        inth        intallPoint intpoints   [][]*point
}func (i *image) newImage(m, n int) *image {img := make([][]*point, m)for i1 := 0; i1 < m; i1++ {img[i1] = make([]*point, n)for j := 0; j < n; j++ {itemPoint := &point{x:     i1,y:     j,value: 0,}img[i1][j] = itemPoint}}return &image{w:        m,h:        n,allPoint: m * n,points:   img,}
}func (i *image) getPointValue(x, y int) (int, error) {for i1 := 0; i1 < i.w; i1++ {for j := 0; j < i.h; j++ {if i1 == x && j == y {return i.points[i1][j].value, nil}}}return 0, errors.New("not found")
}func (i *image) setPointValue(p1 *point) (*image, error) {for i1 := 0; i1 < i.w; i1++ {for j := 0; j < i.h; j++ {if i1 == p1.x && j == p1.y {i.points[i1][j].value = p1.valuereturn i, nil}}}return nil, errors.New("not found")
}func (i *image) setPointsValue(list []*point, value int) {for _, p := range list {p.value = valuei.setPointValue(p)}
}func (i *image) countWaitePoints() (count int) {for i1 := 0; i1 < i.w; i1++ {for j := 0; j < i.h; j++ {if i.points[i1][j].value == 1 {count++}}}return
}func (i *image) isAllWaite() bool {if i.countWaitePoints() == i.allPoint {return true}return false
}// 获取一个点周围的非白色像素点
func (i *image) listAroundNotWaitePoints(p1 *point) []*point {list := make([]*point, 0)centerX, centreY := p1.x, p1.yfor x := -1; x <= 1; x++ {for y := -1; y <= 1; y++ {if x != 0 && y != 0 {continue}itemX := centerX + xitemY := centreY + y//溢出if itemX*itemY < 0 {continue}if value, err := i.getPointValue(itemX, itemY); err == nil {if value != 1 {list = append(list, &point{x:     itemX,y:     itemY,value: i.points[itemX][itemY].value,})}}}}return list
}func (i *image) listWaitePoints() []*point {list := make([]*point, 0)for i1 := 0; i1 < i.w; i1++ {for j := 0; j < i.h; j++ {if i.points[i1][j].value == 1 {list = append(list, &point{x:     i1,y:     j,value: i.points[i1][j].value,})}}}return list
}func (i *image) timer(count int) int {if i.isAllWaite() {return count} else {count++waitePoints := i.listWaitePoints()for _, waitePoint := range waitePoints {//开始膨胀if notWaitePoints := i.listAroundNotWaitePoints(waitePoint); len(notWaitePoints) > 0 {i.setPointsValue(notWaitePoints, 1)}}return i.timer(count)}}func main() {var inputStr stringfmt.Scan(&inputStr)inputStrList := strings.Split(inputStr, ",")inputIntList := make([]int, len(inputStrList))for i, s2 := range inputStrList {inputIntList[i], _ = strconv.Atoi(s2)}var m, n intm = inputIntList[0]n = inputIntList[1]myImage := new(image)img := myImage.newImage(m, n)img.setPointValue(&point{x:     inputIntList[2],y:     inputIntList[3],value: 1,})img.setPointValue(&point{x:     inputIntList[4],y:     inputIntList[5],value: 1,})count := img.timer(0)fmt.Println(count)}

总结:矩阵扩散在图形图像中被称为膨胀,结合openCV中对图片和像素点的定义,在程序中我定义了两种struct: image 和point,并实现了膨胀系数为1的膨胀算法。在通过递归的方式不断执行膨胀操作,知道全部点都变白,则停止递归,每次膨胀时计数器timer加一,递归结束后返回timer.

关键字:泉州企业建站程序_宁波靠谱的网站推广公司_投稿网站_郑州seo优化外包

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: