python中怎么样统计一张图像中白色和黑色像素点个数(二值图) |小知识

前言

有时候需要计算一张图片里的里黑白像素的个数来计算某些指标,所以这里就教大家怎么计算

代码实现

import numpy as np
import cv2

二值化图像直接
print(len(im[im==255]))
print(len(im[im==0]))

彩色图像

#读入图像
img = cv2.imread('0.jpg')
#获取尺寸
h,w,_=img.shape
#建立一个与图像尺寸相同的全零数组
npim = np.zeros((h,w,3), dtype=np.int)
#将图像3个通道相加赋值给空数组
npim[:]=img[:,:,0]+img[:,:,1]+img[:,:,2]
#统计白色像素个数
print(“白色像素%s个”%len(npim[npim==255*3]))
#统计黑色像素个数

print(“黑色像素%s个”%len(npim[npim==0]))
黑白图片彩色化是一项非常有趣的任务,最近使用深度学习技术实现此任务的研究成果也受到了广泛关注。在Python,你可以使用深度学习框架如TensorFlow或PyTorch来实现此任务。 以下是使用PyTorch实现黑白图片彩色化的基本步骤: 1. 导入必要的库 ```python import torch import torch.nn as nn import torch.optim as optim import torchvision.transforms as transforms from torch.utils.data import DataLoader from torchvision.datasets import CIFAR10 from tqdm import tqdm ``` 2. 定义模型 定义一个简单的卷积神经网络模型,例如: ```python class ColorizationNet(nn.Module): def __init__(self): super(ColorizationNet, self).__init__() self.conv1 = nn.Conv2d(in_channels=1, out_channels=8, kernel_size=3, stride=2, padding=1) self.conv2 = nn.Conv2d(in_channels=8, out_channels=16, kernel_size=3, stride=2, padding=1) self.conv3 = nn.Conv2d(in_channels=16, out_channels=32, kernel_size=3, stride=2, padding=1) self.conv4 = nn.Conv2d(in_channels=32, out_channels=64, kernel_size=3, stride=2, padding=1) self.conv5 = nn.Conv2d(in_channels=64, out_channels=128, kernel_size=3, stride=2, padding=1) self.conv6 = nn.Conv2d(in_channels=128, out_channels=256, kernel_size=3, stride=2, padding=1) self.conv7 = nn.Conv2d(in_channels=256, out_channels=512, kernel_size=3, stride=2, padding=1) self.conv8 = nn.Conv2d(in_channels=512, out_channels=512, kernel_size=3, stride=2, padding=1) self.conv9 = nn.Conv2d(in_channels=512, out_channels=512, kernel_size=3, stride=2, padding=1) self.deconv1 = nn.ConvTranspose2d(in_channels=512, out_channels=512, kernel_size=4, stride=2, padding=1) self.deconv2 = nn.ConvTranspose2d(in_channels=512, out_channels=512, kernel_size=4, stride=2, padding=1) self.deconv3 = nn.ConvTranspose2d(in_channels=512, out_channels=256, kernel_size=4, stride=2, padding=1) self.deconv4 = nn.ConvTranspose2d(in_channels=256, out_channels=128, kernel_size=4, stride=2, padding=1) self.deconv5 = nn.ConvTranspose2d(in_channels=128, out_channels=64, kernel_size=4, stride=2, padding=1) self.deconv6 = nn.ConvTranspose2d(in_channels=64, out_channels=32, kernel_size=4, stride=2, padding=1) self.deconv7 = nn.ConvTranspose2d(in_channels=32, out_channels=16, kernel_size=4, stride=2, padding=1) self.deconv8 = nn.ConvTranspose2d(in_channels=16, out_channels=2, kernel_size=4, stride=2, padding=1) self.relu = nn.ReLU() self.tanh = nn.Tanh() def forward(self, x): x = self.relu(self.conv1(x)) x = self.relu(self.conv2(x)) x = self.relu(self.conv3(x)) x = self.relu(self.conv4(x)) x = self.relu(self.conv5(x)) x = self.relu(self.conv6(x)) x = self.relu(self.conv7(x)) x = self.relu(self.conv8(x)) x = self.relu(self.conv9(x)) x = self.relu(self.deconv1(x)) x = self.relu(self.deconv2(x)) x = self.relu(self.deconv3(x)) x = self.relu(self.deconv4(x)) x = self.relu(self.deconv5(x)) x = self.relu(self.deconv6(x)) x = self.relu(self.deconv7(x)) x = self.tanh(self.deconv8(x)) return x ``` 3. 定义损失函数和优化器 ```python criterion = nn.MSELoss() optimizer = optim.Adam(model.parameters(), lr=0.001) ``` 4. 加载数据 使用CIFAR10数据集作为示例数据集,其包含了50,000张训练集和10,000张测试集的彩色图片,每张图片的大小为32x32像素。 ```python # 数据预处理 transform = transforms.Compose([ transforms.Resize((32, 32)), transforms.Grayscale(num_output_channels=1), transforms.ToTensor() ]) train_set = CIFAR10(root='./data', train=True, transform=transform, download=True) test_set = CIFAR10(root='./data', train=False, transform=transform, download=True) train_loader = DataLoader(train_set, batch_size=64, shuffle=True) test_loader = DataLoader(test_set, batch_size=64, shuffle=False) ``` 5. 训练模型 ```python # 训练 for epoch in range(100): running_loss = 0.0 for i, data in tqdm(enumerate(train_loader, 0)): inputs, _ = data optimizer.zero_grad() # 转换为黑白图片 gray_inputs = inputs[:, 0, :, :].unsqueeze(1) # 前向传播 outputs = model(gray_inputs) # 计算损失 loss = criterion(outputs, inputs) # 反向传播和优化 loss.backward() optimizer.step() # 统计损失 running_loss += loss.item() # 打印每个epoch的损失 print(f'Epoch {epoch + 1}, Loss: {running_loss / len(train_loader)}') ``` 6. 测试模型 ```python # 测试 with torch.no_grad(): model.eval() test_loss = 0.0 for i, data in tqdm(enumerate(test_loader, 0)): inputs, _ = data # 转换为黑白图片 gray_inputs = inputs[:, 0, :, :].unsqueeze(1) # 前向传播 outputs = model(gray_inputs) # 计算损失 loss = criterion(outputs, inputs) # 统计损失 test_loss += loss.item() # 保存一些样本 if i == 0: inputs = inputs.numpy() outputs = outputs.numpy() for j in range(8): img_in = inputs[j, 0, :, :] img_out = outputs[j, :, :, :] img_out = np.transpose(img_out, (1, 2, 0)) plt.subplot(2, 8, j + 1) plt.imshow(img_in, cmap='gray') plt.subplot(2, 8, j + 9) plt.imshow(img_out) # 打印测试集上的平均损失 print(f'Test Loss: {test_loss / len(test_loader)}') ``` 通过以上步骤,你就可以在Python使用PyTorch实现黑白图片彩色化。
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值