第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

獲取所有像素值(rgba)

獲取所有像素值(rgba)

Go
慕慕森 2022-01-17 10:54:13
我是圍棋新手,正在努力提高我的技能。目前我正在處理圖像,我需要擁有圖像的所有像素的紅色值。我知道我可以使用下面的代碼來實現(xiàn)這一點,但對我來說似乎很慢(~485 毫秒),pixList := make([]uint8, width*height)for y := 0; y < height; y++ {    for x := 0; x < width; x++ {        r, _, _, _ := img.At(x, y).RGBA()        var rNew uint8 = uint8(float32(r)*(255.0/65535.0))        pixList[(x*height)+y] = rNew    }}有沒有更快的方法來做到這一點?任何內(nèi)置函數(shù)可以一次獲取所有像素值?編輯:我現(xiàn)在使用 Pix 來獲取所有像素數(shù)據(jù),但我的 Pix 列表仍然沒有給出我正在尋找的內(nèi)容。新代碼:pixList := img.(*image.Paletted).PixnewPixList := make([]uint8, width*height)fmt.Println(len(pixList))//gives width*height, shouldn't it be width*height*4?for index := 0; index < width*height; index++ {    newPixList[index] = pixList[index*4]//this part gives index out of range error, because the pixList is length of width*height, i dunno why}我認為它不是我的圖像,因為它是 rgba 圖像,也許轉(zhuǎn)換可以工作。有任何想法嗎?
查看完整描述

1 回答

?
慕桂英546537

TA貢獻1848條經(jīng)驗 獲得超10個贊

您不能使此模式高效,因為這需要對每個像素進行接口方法調(diào)用。為了快速訪問圖像數(shù)據(jù),您可以直接訪問圖像數(shù)據(jù)。以image.RGBA類型為例:


type RGBA struct {

        // Pix holds the image's pixels, in R, G, B, A order. The pixel at

        // (x, y) starts at Pix[(y-Rect.Min.Y)*Stride + (x-Rect.Min.X)*4].

        Pix []uint8

        // Stride is the Pix stride (in bytes) between vertically adjacent pixels.

        Stride int

        // Rect is the image's bounds.

        Rect Rectangle

}

每種圖像類型的文檔包括數(shù)據(jù)布局和索引公式。Pix對于這種類型,您可以使用以下方法從切片中提取所有紅色像素:


w, h := img.Rect.Dx(), img.Rect.Dy()

pixList := make([]uint8, w*h)


for i := 0; i < w*h; i++ {

    pixList[i] = img.Pix[i*4]

}

如果需要轉(zhuǎn)換其他圖像類型,可以使用現(xiàn)有的方法進行顏色轉(zhuǎn)換,但首先要斷言正確的圖像類型并使用native*At方法避免接口調(diào)用。從 YCbCr 圖像中提取近似紅色值:


w, h := img.Rect.Dx(), img.Rect.Dy()

pixList := make([]uint8, w*h)


for x := 0; x < w; x++ {

    for y := 0; y < h; y++ {

        r, _, _, _ := img.YCbCrAt(x, y).RGBA()

        pixList[(x*h)+y] = uint8(r >> 8)


    }

}

return pixList

類似于上面的 YCbCr 圖像沒有“紅色”像素(需要為每個單獨的像素計算值),調(diào)色板圖像沒有像素的單獨 RGBA 值,需要在圖像的調(diào)色板中查找。您可以更進一步并預先確定調(diào)色板顏色的顏色模型以刪除Color.RGBA()接口調(diào)用以加快速度,就像這樣:


palette := make([]*color.RGBA, len(img.Palette))

for i, c := range img.Palette {

    palette[i] = c.(*color.RGBA)

}


pixList := make([]uint8, len(img.Pix))


for i, p := range img.Pix {

    pixList[i] = palette[p].R

}



查看完整回答
反對 回復 2022-01-17
  • 1 回答
  • 0 關(guān)注
  • 351 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號