显示的,所以
img = cv2.imread(path)
img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
print(img)
plot.imshow(img)
plot.show()
此时显示的
opencv去除
图片
中
某一颜色(python实现)
一 打开
图片
打开
图片
的时候最好使用windows自带的“画图”软件查看(在画图软件下通过句柄精灵获得点的
RGB
值与opencv
中
获得的是一样的),在“画图”的左下角可以看到图像
中
某个点的坐标值如(344,123),如果要在opencv
中
处理该点的话,需要把坐标值反一下即 img[123, 344]才能取得该点
二 使用句柄精灵等软件获得想要改变的颜色的
RGB
值
需要注意的是opencv
中
的R与B通道是反着的(后面代码
中
有相应说明)
实际对
图片
进行处理的时候,经常会碰到单一颜色背景的情况,这时候就可以采用图像处理的方法,将该单一颜色去除,形成一个透明的
图片
。如果需要,还可以加上新的背景图,
图片
就焕然一新了。
删除
图片
某种颜色,Pillow或OpenCV都可以实现。实现的思路都是一致的,就是将
图片
转换为带透明通道的格式,然后设置透明度为0。
Pillow库的实现,采用image.convert('
RGB
A'),然后查找相应的颜色,最后设置透明通道为0
OpenCV库的实现,采用cv2.cvtColor(img1, cv2.COLOR
OpenCV 学习笔记(提取图像
中
特点颜色)
我们经常需要提取图像
中
某种特殊颜色的区域,比如黄色或者红色区域。如果只是提取特点的颜色,那么很简单,直接做颜色比较就可以了。如果要选取某个颜色范围,这个工作在
RGB
空间
中
就不是那么方便了。这时我们通常会选取 HSV 或类似的颜色空间。
关于 HSV 空间的介绍网上有很多,这里就不详细写了。但是可以认为 Hue 表示颜色,Saturation 表示颜色的饱和度,Brightness 是亮度。选取颜色范围时我们通常用 Hue 和 Sat 两个维度。下面是在网上
# 将灰度图像进行二值化处理
ret, thresh = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)
# 对二值化图像进行形态学操作,去除噪点
kernel = np.ones((3,3), np.uint8)
opening = cv2.morphologyEx(thresh, cv2.MORPH_OPEN, kernel, iterations=2)
# 找到轮廓
contours, hierarchy = cv2.findContours(opening, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
# 循环遍历每个轮廓
for contour in contours:
# 计算轮廓面积
area = cv2.contourArea(contour)
if area < 100:
continue
# 找到轮廓的外接矩形
x, y, w, h = cv2.boundingRect(contour)
# 裁剪出数字图像
digit_roi = opening[y:y+h, x:x+w]
# 调整数字图像大小
resized_digit_roi = cv2.resize(digit_roi, (28, 28))
# 将数字图像转化为 MNIST 数据集的格式
mnist_digit = resized_digit_roi.reshape(1, 28, 28, 1).astype('float32') / 255.0
# 使用训练好的模型进行数字识别
prediction = model.predict(mnist_digit)
digit = np.argmax(prediction)
# 在原图像上绘制识别结果
cv2.rectangle(img, (x, y), (x+w, y+h), (0, 255, 0), 2)
cv2.putText(img, str(digit), (x, y), cv2.FONT_HERSHEY_SIMPLEX, 0.8, (0, 255, 0), 2)
# 显示结果图像
plt.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2
RGB
))
plt.show()
该代码使用了OpenCV库对银行卡数字进行了识别。其
中
,首先读取了银行卡图像,然后将图像转化为灰度图像,再进行二值化处理,去除噪点,找到数字轮廓,裁剪数字图像,将数字图像转化为MNIST数据集的格式,使用训练好的模型进行数字识别,最后在原图像上绘制识别结果。需要注意的是,该代码
中
的模型需要自己训练或者使用已经训练好的模型进行识别。