簡體   English   中英

在Python中僅使用矩陣(無BGR2GRAY函數)將圖像轉換為灰度

[英]Convert an image to grayscale using only matrix (No BGR2GRAY function) in Python

我試圖在不使用OpenCV或Numpy的情況下將圖像轉換為灰度示例:我圖像的矩陣是

    [[[116 116 117]
  [115 115 116]
  [117 115 115]
  ..., 
  [135 138 142]
  [137 139 139]
  [137 139 139]]

 [[116 116 116]
  [116 116 116]
  [114 116 116]
  ..., 
  [135 139 140]
  [135 137 138]
  [135 137 138]]

 [[115 118 114]
  [115 118 114]
  [112 116 115]
  ..., 
  [132 141 141]
  [134 137 141]
  [133 136 140]]

 ..., 
 [[ 35  44 163]
  [ 31  40 159]
  [ 10  33 158]
  ..., 
  [ 14  48  53]
  [ 24  56  55]
  [ 27  59  58]]

 [[ 24  38 156]
  [ 19  33 151]
  [  7  28 145]
  ..., 
  [ 25  55  66]
  [ 15  59  61]
  [ 17  61  63]]

 [[  0  27 131]
  [  0  26 130]
  [  0  34 113]
  ..., 
  [ 11  39  55]
  [  6  28  56]
  [  4  26  54]]]

使用cv2.COLOR_BGR2GRAY函數,矩陣為:

[[150 150 150 ..., 150 150 150]
[150 173 175 ...,  97  91  89]
[150 176 179 ...,  95  89  82]
..., 
[150  66  67 ..., 152 154 152]
[150  62  59 ..., 152 152 152]
[150  62  64 ..., 155 154 151]]

首先,我不明白為什么我給108時它會返回36個整數,以及如何手動執行

謝謝你的幫助 :)

問題1

您得到的是36個整數而不是108個整數,因為原始圖像具有3個通道(紅色,綠色,藍色,又稱為RGB)。 將其轉換為灰度時,會將其展平到僅一個通道。 108 / 3 = 36 ,似乎合法!

問題2

手動轉換:有多種方法可以將RGB圖像轉換為灰度,但最直接的方法是取三個通道的平均值,基本上是(red_values + green_values + blue values) / 3 因此,請使用原始圖像數組並運行:

gray_image = (image[:,:,0] + image[:,:,1] + image[:,:,2]) / 3

上面是假設您的圖像數組的格式為image.shape = (pixel_height, pixel_width, number_of_channels) ,並且前三個通道代表您的R,G和B通道,但這是非常標准的

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM