Я пытаюсь выполнить нарезку битовой плоскости. Я использую код, представленный здесь, с очень небольшим количеством модификаций в конце экспорта: https://dsp.stackexchange.com/questions/41635/bit-plane-slicing-in-python.
Он работал нормально, когда я использую изображение JPEG в начале. Однако большую часть времени я буду использовать изображение TIF. Поэтому я изменяю первые строки, и теперь код выглядит следующим образом:
img1 = Image.open('C:/Users/Caroline/Documents/Cours/G5/PFE/Donnees/2018_gris.tif')
img = np.array(img1)
out = []
k=7
# create an image for the k bit plane
plane = np.full((img.shape[0], img.shape[1]), 2 ** k, np.uint8)
# execute bitwise and operation
res = cv2.bitwise_and(plane, img)
# multiply ones (bit plane sliced) with 255 just for better visualization
x = res * 255
# append to the output list
out.append(x)
outfinal = np.hstack(out)
imgfinale = Image.fromarray(outfinal.astype(np.uint8))
imgfinale.imsave("test1.tif")
Когда я выполняю это, у меня появляется сообщение об ошибке, которое гласит:
Traceback (most recent call last):
File "C:\Users\Caroline\Desktop\BitPlaneSlicing.py", line 24, in <module>
res = cv2.bitwise_and(plane, img)
cv2.error: OpenCV(4.1.2) D:\Build\OpenCV\opencv-4.1.2\modules\core\src\arithm.cpp:229: error: (-209:Sizes of input arguments do not match) The operation is neither 'array op array' (where arrays have the same size and type), nor 'array op scalar', nor 'scalar op array' in function 'cv::binary_op'
Я проверил несколько веб-сайтов, и я понял из них, что изображение tiff имеет больше каналов, чем мое изображение «плоскости». Чего я не понимаю, так это того, что мое изображение в формате TIFF представляет собой изображение в градациях серого без альфа-полосы. Для доказательства я написал type (img) и type (plane), и ответ тот же (<class 'numpy.ndarray'>
), и img.shape также даст тот же результат, что и plane.shape.
Кроме того, я Я новичок в Pyhton, поэтому я совершенно потерян прямо сейчас, не имея ни малейшего представления о том, что даже попробовать.