Первое изображение в 4-канальном формате RGBA с совершенно бессмысленным, полностью непрозрачным альфа-каналом, который вы можете игнорировать.
Второе изображение в 2-канальном формате Grey + Alpha, где все пиксели чисто черного цвета, а формы определены только в альфа-канале.
Итак, в основном вы хотите:
удалить последний канал первого изображения, что вы можете сделать, используя cv2.IMREAD_COLOR
im = cv2.imread('2.png',cv2.IMREAD_UNCHANGED)[:,:,-1]
Я получил информацию выше с помощью используя ImageMagick , который включен в большинство дистрибутивов Linux и доступен в macOS и Windows.
Команда, которую я использовал в Терминале:
magick identify -verbose 2.png
Пример вывода
Image: 2.png
Format: PNG (Portable Network Graphics)
Mime type: image/png
Class: DirectClass
Geometry: 1040x1533+0+0
Units: Undefined
Colorspace: Gray
Type: Bilevel
Base type: Undefined
Endianess: Undefined
Depth: 8-bit
Channel depth:
Gray: 1-bit <--- Note 1
Alpha: 8-bit <--- Note 1
Channel statistics:
Pixels: 1594320
Gray:
min: 0 (0) <--- Note 2
max: 0 (0) <--- Note 2
mean: 0 (0)
standard deviation: 0 (0)
kurtosis: -3
skewness: 0
entropy: 4.82164e-05
Alpha:
min: 0 (0) <--- Note 3
max: 255 (1) <--- Note 3
mean: 50.3212 (0.197338)
standard deviation: 101.351 (0.397456)
kurtosis: 0.316613
skewness: 1.52096
entropy: 0.0954769
...
...
Я пометил стрелками и примечаниями справа вверху. [ 1115]
Примечание 1: это говорит о том, что изображение серого цвета + альфа
Примечание 2: Это говорит о том, что все пиксели серого цвета черные, поскольку максимальное значение равно нулю, а минимальное равно нулю
Примечание 3: Это говорит мне о том, что есть некоторые полностью прозрачные пиксели и некоторые полностью непрозрачные пиксели
Оценка блока может быть вложена:
sub function {
eval {
die "error that can be handled\n";
1;
} or do {
#propagate the error if it isn't the one we expect
die $@ unless $@ eq "error that can be handled\n";
#handle the error
};
die "uncaught error";
}
eval { function(); 1 } or do {
warn "caught error $@";
};
Я не абсолютно уверен, что Вы хотите сделать, но я думаю, что можно сделать это с обработчиком.
$SIG{__DIE__} = sub { print $@ } ;
eval{ function($param); 1 } or next;