OpenCV, модуль Image вопросы и ответы по одиночному и три канала взаимного преобразования

OpenCV, модуль Image вопросы и ответы по одиночному и три канала взаимного преобразования

I. Введение

Более недавний проект с фотографиями, иногда забывает изменить значение по умолчанию, так что чтение API стал полутоновым графиком трехканального, хотя после переналадки, но очень любопытной разницы между результатами первоначального чтения и позднего преобразованием. В руках-на многопроцессорных подбрасывать идеи, насосное хорошее время, чтобы немного поэкспериментировать со следующими результатами.

Во-вторых, тест

модуль 1.opencv

Там, где предыдущие коды, говорят результаты, следующим образом:

src_1 = cv2.imread(r"F:\demo\MS_DMS\add\0_\2.jpg", 0) # 正确读入单通道的方式
src_3 = cv2.imread(r"F:\demo\MS_DMS\add\0_\2.jpg") # 以三通道的方式读入
print(src_1)
gray = cv2.cvtColor(src_3, cv2.COLOR_BGR2GRAY) # 再将后者由三通道转换为单通道
list_ = ((gray == src_1).astype("int8")).tolist() # 转为列表,方便计算比对结果中 0(False) 的个数
print(list_.count(0))

результаты

src_1 = 
[[148 149 150 ... 154 154 154]
 [148 149 150 ... 154 154 154]
 [148 150 151 ... 154 154 154]
 ...
 [154 146 132 ... 213 195 154]
 [144 135 130 ... 172 207 169]
 [134 123 118 ... 210 180 199]]
 
list_.count(0) = 0 # 说明两个数组相等

Как видно из сказанного выше, оригинал считывается и нажмите трехканальный полутоновой фиг чтения, а затем преобразуется обратно в одноканальном варианте по фиг сравнению, результат равен двум. Посмотрите, как один канал в изменение трехканального.

src_1 =  [[148 149 150 ... 154 154 154]
 [148 149 150 ... 154 154 154]
 [148 150 151 ... 154 154 154]
 ...
 [154 146 132 ... 213 195 154]
 [144 135 130 ... 172 207 169]
 [134 123 118 ... 210 180 199]]

src_3 =  [[[148 148 148]
  [149 149 149]
  [150 150 150]
  ...
  [154 154 154]
  [154 154 154]
  [154 154 154]]

 [[148 148 148]
  [149 149 149]
  [150 150 150]
  ...
  [154 154 154]
  [154 154 154]
  [154 154 154]]

 [[148 148 148]
  [150 150 150]
  [151 151 151]
  ...
  [154 154 154]
  [154 154 154]
  [154 154 154]]

 ...

 [[154 154 154]
  [146 146 146]
  [132 132 132]
  ...
  [213 213 213]
  [195 195 195]
  [154 154 154]]

 [[144 144 144]
  [135 135 135]
  [130 130 130]
  ...
  [172 172 172]
  [207 207 207]
  [169 169 169]]

 [[134 134 134]
  [123 123 123]
  [118 118 118]
  ...
  [210 210 210]
  [180 180 180]
  [199 199 199]]]

src_3[0:1, 0:1, :] = [[[148 148 148]]] # 打印了三通道图的第一个像素点的数值看了一下

Длинные, примерно выглядеть на линии, чтобы программа просто скопировать один канал данных о том, что другие два канала данных с другой, это одна из первой точки пикселя я намеренно печататься значение можно увидеть. Как мы pytorch, форма массива (C, H, W), то есть то, что это?

# 特意将数组形状转换了一下,数值表现如下:
src_3_ =  [[[148 148 148 ... 152 152 152]
  [152 152 149 ... 151 152 152]
  [152 152 152 ... 154 154 154]
  ...
  [157 157 157 ... 157 157 157]
  [150 150 150 ... 172 172 191]
  [191 191 208 ... 151 158 158]]

 [[158 161 161 ... 155 155 155]
  [150 150 150 ... 203 203 213]
  [213 213 173 ... 144 158 158]
  ...
  [ 96  96  68 ... 134 151 151]
  [151 129 129 ... 163 163 163]
  [142 142 142 ...  84  84  74]]

 [[ 74  74  94 ... 122 115 115]
  [115  95  95 ... 164 164 164]
  [140 140 140 ... 110 110 116]
  ...
  [134 134 134 ... 163 163 163]
  [163 163 163 ... 165 166 166]
  [166 166 166 ... 199 199 199]]]
  
src_3_.shape =  (3, 74, 76)

2.Image модуль

ptyorch в этом модуле больше, так и немного поэкспериментировать.

src = Image.open(r"F:\demo\MS_DMS\add\0_\2.jpg")
print(np.array(src))

Результаты:

[[[148 148 148]
  [149 149 149]
  [150 150 150]
  ...
  [154 154 154]
  [154 154 154]
  [154 154 154]]

 [[148 148 148]
  [149 149 149]
  [150 150 150]
  ...
  [154 154 154]
  [154 154 154]
  [154 154 154]]

 [[148 148 148]
  [150 150 150]
  [151 151 151]
  ...
  [154 154 154]
  [154 154 154]
  [154 154 154]]

 ...

 [[154 154 154]
  [146 146 146]
  [132 132 132]
  ...
  [213 213 213]
  [195 195 195]
  [154 154 154]]

 [[144 144 144]
  [135 135 135]
  [130 130 130]
  ...
  [172 172 172]
  [207 207 207]
  [169 169 169]]

 [[134 134 134]
  [123 123 123]
  [118 118 118]
  ...
  [210 210 210]
  [180 180 180]
  [199 199 199]]]

Изображение открытой функции не предусмотрено в оттенках серого чтения (чтение документации функции не нашел ничего), а затем только в конце преобразовать его в одну карту канала, поэтому pytorch прочитать единое представление канала, когда вообще будет идти преобразовать его. Назад к результатам выше, это согласуется с результатами OpenCV, не верю, что вы можете сделать сравнение.

src2 = cv2.imread(r"F:\demo\MS_DMS\add\0_\2.jpg")
src = Image.open(r"F:\demo\MS_DMS\add\0_\2.jpg")
print(((src2 == np.array(src).astype("int8")).tolist()).count(0))

结果为 0 ,说明以不同API读取的两个数组结果是一样的。

Кроме того, изображение является единственным каналом в данные трехканального непосредственно на канале , а затем две копии, так что те же данные из трех каналов.
Попробуйте следующие результаты одного канала.

src2 = cv2.imread(r"F:\demo\MS_DMS\add\0_\2.jpg", 0) # opencv按单通道读取图片
src = Image.open(r"F:\demo\MS_DMS\add\0_\2.jpg").convert("L") # Image将三通道转为单通道
print("src = ",np.array(src))
print(((src2 == np.array(src).astype("int8")).tolist()).count(0)) # 比对二者是否一样

结果为:

src =  [[148 149 150 ... 154 154 154]
 [148 149 150 ... 154 154 154]
 [148 150 151 ... 154 154 154]
 ...
 [154 146 132 ... 213 195 154]
 [144 135 130 ... 172 207 169]
 [134 123 118 ... 210 180 199]]
 
((src2 == np.array(src).astype("int8")).tolist()).count(0) =  0    # 为 0 表示上面两个数组是相等的

В-третьих, резюме

После этого испытания, и , наконец, решение сомнений в моем уме, чтобы подвести итог:
① OpenCV по результатам одного канала чтения фотографии и прочитать пресс - изображение , а затем преобразуется в три канала одноканальные и последовательные результаты обоих;
② изображение только по три канала чтения изображения, OpenCV в соответствии с результатами трехканального образом читает. После преобразования в один канал, то результат также согласуется с OpenCV.
И есть другие возможные сомнения, проверить его снова медленно. Удобный ~ ~

发布了11 篇原创文章 · 获赞 1 · 访问量 1057

рекомендация

отblog.csdn.net/tangshopping/article/details/103995485