這是this question的更高級版本。從this image,我將如何從ImageMagick/GraphicsMagick /一個不同的命令行工具獲取三角形下像素的平均顏色值?優選地,該解決方案也適用於其他多邊形。ImageMagick - 查找圖像中三角形的平均顏色
回答
我結束了使用scikit-解決我的問題圖像和numpy python模塊。示例代碼如下:
from skimage import io, draw
import numpy
# read in the image as a numpy array
image = io.imread("image.png")
# setup a list of coords in the polygon
polygon = numpy.array([[100, 100], [200, 100], [200, 200], [100, 200]])
# Get a 2D list of pixels in the polygon
pixels = image[draw.polygon(polygon[:, 1], polygon[:, 0])]
# Use the channels of each pixel to get averages and convert them to ints
channels = numpy.average(pixels, 0).astype(int)
# Print!
print(channels)
我會使用你的座標來使用-draw創建感興趣區域的蒙版。然後這可以用於將形狀外部的區域轉換爲透明區域。然後像以前一樣將圖像縮小到1x1像素。
@ Bonzo的答案的骨頭上放一些肉的種類,這裏有一種方法可以做到這一點。
convert image.jpg \
\(+clone -evaluate set 0 -fill white \
-draw "polygon 400,50 450,150 200,220" \
-write mask.png -transparent black \
\) -compose copyopacity -composite \
-write masked.png -resize 1x1! \
-alpha off -depth 8 -format "%[pixel:p{0,0}]\n" info:
srgb(145,114,94)
所以,說... 「加載您的原始圖像,並從主圖像做括號下面的東西就在身邊,流連忘返。複製圖像(-clone
)並使其全黑(-evaluate set 0
),併爲我們即將繪製的多邊形填充顏色爲白色(-fill white
),繪製多邊形(-draw "polygon ..."
)並將其保存在名爲mask.png
的文件中,現在讓圖像的所有黑色區域都透明。有一個蒙版,現在通過關閉圓括號回到原始圖像,從蒙版圖像中複製透明圖像並將其應用於原始圖像(-compose copyopacity -composite
),將蒙版圖像寫爲masked.png
。Res將其平均爲1x1像素。現在輪到透明度關閉,使該單個像素固體和終端它是人類可讀的條款上寫「
你可以看到中間的圖像 - 這裏是mask.png
:
這裏是masked.png
:
是的,我知道這並不完全匹配,但這只是因爲...如果你沒有提供座標,我不得不猜測它們!把你自己的號碼放入-draw polygon
部分,它會正常工作。
您實際上不需要任何一箇中間圖像,我只保存它們用於調試和演示目的,因此您可以從上面的命令中刪除-write mask.png
和-write masked.png
。
驗證
只是爲了檢查舍入和平均的準確性,您可以用數學計算的平均顏色。您使用與上述相同的基本技術,但通過計算遮罩中白色像素的比例來計算平均值的比例因子,然後遮罩圖像並查看遮罩中R,G和B的平均值圖像和縮放它們按比例...
convert -respect-parentheses image.jpg \
\(+clone -evaluate set 0 -fill white \
-draw "polygon 400,50 450,150 200,220" \
-format "Factor:%[fx:1/mean]\n" -write info: \
\) -compose multiply -composite -verbose info: \
| grep -E "Factor:|Red:|Green:|Blue:|mean:"
Factor:21.4019
Red:
mean: 6.70078 (0.0262776)
Green:
mean: 5.31762 (0.0208534)
Blue:
mean: 4.40595 (0.0172782)
# Check the Red value - original method gave srgb(145,114,94)
echo "6.70078*21.4019"|bc
143.40942
# Check the Green value
echo "5.317*21.4019"|bc
113.7939
# Check the Blue value
echo "4.40595*21.4019"|bc
94.29570
順便說一句,這個平均作品已在此:
convert -size 100x100 xc:"srgb(145,114,94)" average.png
- 1. photoshop如何計算圖像的「平均模糊」(平均顏色)?
- 2. 平均顏色(X11顏色)
- 3. 在圖中查找三角形
- 4. 改變一個平面的三角形的顏色3JS
- 5. 在Photoshop中查找所有圖層/圖像的平均顏色並使用平均顏色的文件名保存的腳本
- 6. 獲取圖像的平均外部像素顏色
- 7. 如何計算numpy數組中圖像的平均顏色?
- 8. Mac Screen的平均顏色
- 9. 查找圖像平均成色通過Emgu CV
- 10. 查找三角形的邊角
- 11. 在圖像中查找白色矩形
- 12. gnuplot中基於三角形的圖像
- 13. 顏色平均線ggplot
- 14. Python的OpenCV的找到圖像中的所有三角形
- 15. 顏色[,]在C#中的平均
- 16. 使用RMagick可以獲得平均圖像顏色嗎?
- 17. 在圖像中旋轉三角形 - MATLAB
- 18. 如何查找三角形的旋轉
- 19. 查找三角形的區域
- 20. 查找像素顏色
- 21. 產生顏色三角
- 22. 查找Android中可支配圖像的主色顏色
- 23. Matplotlib用顏色或形狀區分平均值和中位數
- 24. 使用CUDA查找一堆圖像的像素平均值
- 25. 如何更改Spinner中三角形的高亮(聚焦)顏色
- 26. 爲三角形中的每個頂點設置顏色
- 27. ImageMagick中的灰色卡片顏色平衡
- 28. 在三角形的三角形中繪製三角形
- 29. 獲取圖片的平均顏色和使用java比較圖片顏色
- 30. 圖像的切出透明三角形
我有一段時間,感覺像實現您的答案 - 希望沒關係。 –
是的,沒關係 – Bonzo