Python实现图像的垂直投影示例

Python + OpenCV 直接上代码

import cv2
import numpy as np
from matplotlib import pyplot as plt
from PIL import Image

img=cv2.imread('0002.jpg') #读取图片,装换为可运算的数组
GrayImage=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)  #将BGR图转为灰度图
ret,thresh1=cv2.threshold(GrayImage,130,255,cv2.THRESH_BINARY) #将图片进行二值化(130,255)之间的点均变为255(背景)
# print(thresh1[0,0])#250 输出[0,0]这个点的像素值 				#返回值ret为阈值
# print(ret)#130
(h,w)=thresh1.shape #返回高和宽
# print(h,w)#s输出高和宽
a = [0 for z in range(0, w)]
print(a) #a = [0,0,0,0,0,0,0,0,0,0,...,0,0]初始化一个长度为w的数组,用于记录每一列的黑点个数 

#记录每一列的波峰
for j in range(0,w): #遍历一列
  for i in range(0,h): #遍历一行
    if thresh1[i,j]==0: #如果改点为黑点
      a[j]+=1 		#该列的计数器加一计数
      thresh1[i,j]=255 #记录完后将其变为白色
  # print (j)      

#
for j in range(0,w): #遍历每一列
  for i in range((h-a[j]),h): #从该列应该变黑的最顶部的点开始向最底部涂黑
    thresh1[i,j]=0  #涂黑

#此时的thresh1便是一张图像向垂直方向上投影的直方图
#如果要分割字符的话,其实并不需要把这张图给画出来,只需要的到a=[]即可得到想要的信息

# img2 =Image.open('0002.jpg')
# img2.convert('L')
# img_1 = np.array(img2)
plt.imshow(thresh1,cmap=plt.gray())
plt.show()
cv2.imshow('img',thresh1)
cv2.waitKey(0)
cv2.destroyAllWindows()

原图:

运行结果:

在水平方向上进行投影,代码如下所示(原理同上):

import cv2
import numpy as np
from matplotlib import pyplot as plt
from PIL import Image

img=cv2.imread('C:/Users/Jet Zhang/Desktop/50/50/cut.png')
GrayImage=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
ret,thresh1=cv2.threshold(GrayImage,130,255,cv2.THRESH_BINARY)

(h,w)=thresh1.shape #返回高和宽

a = [0 for z in range(0, h)]
print(a) 

for j in range(0,h):
  for i in range(0,w):
    if thresh1[j,i]==0:
      a[j]+=1
      thresh1[j,i]=255

for j in range(0,h):
  for i in range(0,a[j]):
    thresh1[j,i]=0  

plt.imshow(thresh1,cmap=plt.gray())
plt.show()

效果图如下所示:

以上这篇Python实现图像的垂直投影示例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • python 实现从高分辨图像上抠取图像块

    我就废话不多说了,直接上代码吧! #coding=utf-8 import cv2 import numpy as np import os # 程序实现功能: # 根据patch在高分辨率图像上的索引值,crop出对应区域的图像 # 并验证程序的正确性 ''' 对于当前输入的3328*3328的高分辨率特征图,首先resize到640*640 然后根据当前的patch文件名(包含了patch在高分辨率图像上的行索引和列索引) 这个索引值是将高分辨率图像划分成多个没有overlap的256*25

  • Python绘制正余弦函数图像的方法

    今天打算通过绘制正弦和余弦函数,从默认的设置开始,一步一步地调整改进,让它变得好看,变成我们初高中学习过的图象那样.通过这个过程来学习如何进行对图表的一些元素的进行调整. 01. 简单绘图 matplotlib有一套允许定制各种属性的默认设置.你可以几乎控制matplotlib中的每一个默认属性:图像大小,每英寸点数,线宽,色彩和样式,子图(axes),坐标轴和网格属性,文字和字体属性,等等. 安装 pip install matplotlib 虽然matplotlib的默认设置在大多数情况下相

  • python实现高斯投影正反算方式

    使用Python实现了一下我们同事的C++高斯投影正反算,实际跑通,可用. #!/ usr/bin/python # -*- coding:utf-8 -*- import math def LatLon2XY(latitude, longitude): a = 6378137.0 # b = 6356752.3142 # c = 6399593.6258 # alpha = 1 / 298.257223563 e2 = 0.0066943799013 # epep = 0.0067394967

  • Python通过VGG16模型实现图像风格转换操作详解

    本文实例讲述了Python通过VGG16模型实现图像风格转换操作.分享给大家供大家参考,具体如下: 1.图像的风格转化 卷积网络每一层的激活值可以看作一个分类器,多个分类器组成了图像在这一层的抽象表示,而且层数越深,越抽象 内容特征:图片中存在的具体元素,图像输入到CNN后在某一层的激活值 风格特征:绘制图片元素的风格,各个内容之间的共性,图像在CNN网络某一层激活值之间的关联 风格转换:在一幅图片内容特征的基础上添加另一幅图片的风格特征从而生成一幅新的图片.在卷积模型训练中,通过输入固定的图片

  • Python实现图像的垂直投影示例

    Python + OpenCV 直接上代码 import cv2 import numpy as np from matplotlib import pyplot as plt from PIL import Image img=cv2.imread('0002.jpg') #读取图片,装换为可运算的数组 GrayImage=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) #将BGR图转为灰度图 ret,thresh1=cv2.threshold(GrayImage,1

  • python实现图像随机裁剪的示例代码

    实验条件: 从1张图像随机裁剪100张图像 裁剪出图像的大小为 60 x 60 IoU 大于等于 th=0.6 的裁剪框用红色标出,其它裁剪框用蓝色标出 IoU 比对原始区域用绿框标出 实验代码: import cv2 as cv import numpy as np np.random.seed(0) # get IoU overlap ratio def iou(a, b): # get area of a area_a = (a[2] - a[0]) * (a[3] - a[1]) # g

  • python实现图像高斯金字塔的示例代码

    import cv2 import numpy as np import matplotlib.pyplot as plt # Grayscale def BGR2GRAY(img): # Grayscale gray = 0.2126 * img[..., 2] + 0.7152 * img[..., 1] + 0.0722 * img[..., 0] return gray # Bi-Linear interpolation def bl_interpolate(img, ax=1., ay

  • Python OpenCV 图像平移的实现示例

    每次学习新东西的时候,橡皮擦都是去海量检索,然后找到适合自己理解的部分. 再将其拼凑成一个小的系统,争取对该内容有初步理解. 今天这 1 个小时,核心要学习的是图像的平移,在电脑上随便打开一张图片,实现移动都非常简单,但是在代码中,出现了一些新的概念. 检索 OpenCV 图像平移相关资料时,碰到的第一个新概念是就是 仿射变换. 每次看到这样子的数学名字,必然心中一凉,做为一个数学小白,又要瑟瑟发抖了. 百度一下,看看百科中是如何介绍的. 看过上图中的一些相关简介之后,对于这个概念也并没有太深刻

  • 基于OpenCV(python)的实现文本分割之垂直投影法

    在我的上一篇博客中讲述了水平投影法取出文本行图像的实现,在这里将用垂直投影法对文本行的每个字符进行分割.下图是用水平投影法切割的文本行: 文本分割的原理如下,先用水平投影取出单一文本行,接着使用垂直投影法达到对单个字符进行分割. 代码如下: import numpy as np import cv2 def get_vvList(list_data): #取出list中像素存在的区间 vv_list=list() v_list=list() for index,i in enumerate(li

  • Python实现PS图像明亮度调整效果示例

    本文实例讲述了Python实现PS图像明亮度调整效果.分享给大家供大家参考,具体如下: 这里用 Python 实现 PS 图像调整中的明度调整: 我们知道,一般的非线性RGB亮度调整只是在原有R.G.B值基础上增加和减少一定量来实现的,而PS的明度调整原理还得从前面那个公式上去找.我们将正向明度调整公式: RGB = RGB + (255 - RGB) * value / 255 转换为 RGB = (RGB * (255 - value) + 255 * value) / 255, 如果val

  • Python实现PS图像调整黑白效果示例

    本文实例讲述了Python实现PS图像调整黑白效果.分享给大家供大家参考,具体如下: 这里用Python 实现 PS 里的图像调整–黑白,PS 里的黑白并不是简单粗暴的将图像转为灰度图,而是做了非常精细的处理,具体的算法原理和效果图可以参考附录说明. 比起之前的程序,对代码进行了优化,完全用矩阵运算代替了 for 循环,运算效率提升了很多.具体的代码如下: import numpy as np import matplotlib.pyplot as plt from skimage import

  • python使用numpy实现直方图反向投影示例

    最近跟着OpenCV2-Python-Tutorials在学习python_opencv中直方图的反向投影时,第一种方法是使用numpy实现将图中的红色玫瑰分割出来,教程给的代码缺了一句函数,导致实现不出来. 自己加上了后(也不知到这样加对不对)代码和效果如下: 代码: import cv2 import numpy as np roi = cv2.imread('./data/rose_red.jpg') hsv = cv2.cvtColor(roi,cv2.COLOR_BGR2HSV) #t

  • Python OpenCV图像颜色变换示例

    目录 给图像添加颜色 图像按位操作 图像的通道操作 给图像添加颜色 在使用OpenCV操作图像时,有时候需要给图像添加不同的颜色,以达到不同的风格效果.这里介绍的主要是opencv中的cv.applyColorMap()函数. 给图像应用颜色函数cv.applyColorMap(src, colormap, dst=None)src:表示传入的原图:colormap:颜色图类型(17种).可以单独使用,也可以以一个列表的形式批量使用. 以下图举例实现: 直接上代码: # -*-coding:ut

  • Python实现识别图像中人物的示例代码

    目录 前言 环境部署 代码 总结 前言 接着上一篇:AI识别照片是谁,人脸识别face_recognition开源项目安装使用 根据项目提供的demo代码,调整了一下功能,自己写了一个识别人脸的工具代码. 环境部署 按照上一篇的安装部署就可以了. 代码 不废话,直接上代码. #!/user/bin/env python # coding=utf-8 """ @project : face_recognition @author : 剑客阿良_ALiang @file : te

随机推荐