二值化

opencv图像轮廓

六月ゝ 毕业季﹏ 提交于 2020-04-08 07:06:11
最小外接圆 函数 cv2.minEnclosingCircle() 可以帮我们找到一个对象的外切圆。它是所有能够包括对象的圆中面积最小的一个。 案例:现有下面这样一张图片,要求将图片中心的花朵标记出来。 代码: import numpy as np import cv2 as cv img=cv.imread("image.jpg",0) #为了显示方便,这里将图片进行缩放 x,y=img.shape img=cv.resize(img,(y//2,x//2)) #将图片二值化,由于前景物体是黑色的,因此在二值化时采用cv.THRESH_TOZERO_INV这种方式 ret,thresh=cv.threshold(img,127,255,cv.THRESH_TOZERO_INV) #寻找图片中的轮廓,mode=cv.RETR_EXTERNAL,这是为了寻找最外层的轮廓 im,contour,hierarchy=cv.findContours(thresh,cv.RETR_EXTERNAL,cv.CHAIN_APPROX_SIMPLE) #cv.minEnclosingCircle函数的参数要求是ndarray类型,因此这里将找到的 # 轮廓中的所有的点存放在一个列表中,然后使用这个列表创建数组 point_list=[] for i in contour: for j in i:

图片处理完整流程(包含二值化处理、对黑白照片降噪、边缘去黑像素、三通道转为一通道、图片转array、图片转成任意像素等功能)——可满足一般图片处理要求

倾然丶 夕夏残阳落幕 提交于 2020-04-04 00:39:41
因为注释给的很详细,所以直接给代码: 1 from PIL import Image 2 # 二值化处理 3 4 5 def 二值化处理(image): 6 for i in range(1, 5): 7 # 灰度图 8 lim = image.convert('L') 9 # 灰度阈值设为165,低于这个值的点全部填白色 10 threshold = 165 11 table = [] 12 for j in range(256): 13 if j < threshold: 14 table.append(0) 15 else: 16 table.append(1) 17 bim = lim.point(table, '1') 18 return bim 19 def 对黑白图片进行降噪(im): 20 # 图像二值化 21 data = im.getdata() 22 w, h = im.size 23 black_point = 0 24 for x in range(1, w - 1): 25 for y in range(1, h - 1): 26 mid_pixel = data[w * y + x] # 中央像素点像素值 27 if mid_pixel < 50: # 找出上下左右四个方向像素点像素值 28 top_pixel = data[w * (y - 1) +

颜色识别-hue

ⅰ亾dé卋堺 提交于 2020-03-15 19:08:08
使用hue通道的像素值确定颜色,受光照影响很大。 颜色 Orange Red Blue Yellow Green 开始 10 0 125 30 96 结束 30 10 162 64 128 使用HUE通道进行颜色识别的步骤: 1. 三通道RGB分离decompose3 2. 色域转换RGB->hsv trans_from_rgb 3. 在Saturation通道上进行二值化(Saturation通道容易区分) 4. 在hue通道上进行掩码 reduce_domain 5. 将掩码后hue通道上的图像进行二值化,二值化的取值使用特点颜色hue的值,筛选出特定颜色 6. 填充和分割图像并进行形状选择。 7. area_center获取物体的中心坐标。 dev_close_window () dev_open_window (0, 0, 800, 600, 'black', WH) read_image (Image, 'D:/hmeng/code/halcon/yanse.jpg') * 只识别以下颜色 FuseColors := ['Orange','Red','Blue','Yellow','Green'] FuseTypes := [5,10,15,20,30] * HueRanges: Orange 10-30, Red 0-10... HueRanges := [10,30

Arcscan自动矢量化

£可爱£侵袭症+ 提交于 2020-03-08 20:42:01
Hi,大家好,作为一个基层工作的GISer,你是否还在利用编辑工具一步一步点着鼠标,一个一个点进行着矢量化呢?心里默默念着,什么时候才能搞定,大栗子今天带你使用一个简单的工具,全力完成任务,你准备好了么?我们就要开始啦!!! 俗话说得好,巧妇难为无米之炊,材料当先,这一期我们需要的最基本的材料:一张你要矢量化的图,ArcGIS中的扩展工具ArcScan以及辅助的编辑工具。 我们的工作流程如下:二值化栅格图→(校正栅格图→定义坐标系统及投影→数据库中创建矢量化文件)→ArcScan设置→矢量化(记好了没?没记好就多看三遍,不够就五遍吧,不记住怎么知道接下来要实现什么呢?) 步骤一:二值化栅格图 。(这一步至关重要,如果这一步你没完成,下面寸步难行。) 问题1:为什么要二值化栅格 答案:是因为ArcScan很笨,它再神通广大也还是在计算机上运行,所以你懂了,除了机器语言它是没法识别其他的,所以只认识0和1,这么干就是为了让结果精确! 问题2:怎么进行二值化 答案:方法两种,有复杂的也有简单的,肯定都想看看简单的,但是繁琐的也是一种方法不是么?先说复杂的,利用图像处理工具处理,在PS中,打开栅格图片,图像→调整→阈值,然后输出为TIF,其实现在它还是RGB显示的,所以要在画图工具中将其另存为为单色位图bmp格式,由于bmp格式数据不是我们矢量化通用的数据格式,将其继续另存为tif格式

《Real-time Scene Text Detection with Differentiable Binarization》阅读总结

徘徊边缘 提交于 2020-02-15 08:50:01
文章中的文字检测方法是基于图像分割的方法,此类方法的关键部分在于后处理,传统的基于分割的算法在对probability_map后处理中二值化处理是通过一个固定的阈值,但是文章中的方法添加了一个threshold_map,将其放入网络中一起训练,这样针对probability_map中的每个像素会有不同的阈值(方法称为DB),这样的处理可以大大的提高网络的性能。以上DB的方法仅仅在训练过程中是必须的,测试和验证时则可以移除,可以在probability_map中将分割结果转化为bounding box,而无需计算binarization_map,这样可以减少额外的时间消耗。 用文中的一张图来理解就能大致的区分文中方法与传统方法的不同了: 图中蓝色箭头是传统方法的过程,红色箭头是文中方法的过程,可见二值图是由预测图和阈值图计算得来的。 论文中还用到了膨胀卷积(Deformable convolution),膨胀卷积的作用主要是增大感受野,有利于网络检测极端长宽比的文本。本博客中重点不在此,不做细致分析。 下面我将从DB原理,生成标签和loss的构成谈谈我自己的理解,如有错误之处,欢迎指正。 一、DB原理 1. 传统的二值化方法: (1)式中的 t 是预设的固定阈值,(i,j)是预测图上的像素点。 2. Differentiable binarization: 因为(1)式不可微

图像灰度变换、二值化、直方图

∥☆過路亽.° 提交于 2020-02-01 15:23:44
1、灰度变换 1)灰度图的线性变换 Gnew = Fa * Gold + Fb。 Fa为斜线的斜率,Fb为y轴上的截距。 Fa>1 输出图像的对比度变大,否则变小。 Fa=1 Fb≠0时,图像的灰度上移或下移,效果为图像变亮或变暗。 Fa=-1,Fb=255时,发生图像反转。 注意:线性变换会出现亮度饱和而丢失细节。 2)对数变换 t=c * log(1+s) c为变换尺度,s为源灰度,t为变换后的灰度。 对数变换自变量低时曲线斜率高,自变量大时斜率小。所以会放大图像较暗的部分,压缩较亮的部分。 3)伽马变换 y=(x+esp) γ ,x与y的范围是[0,1], esp为补偿系数,γ为伽马系数。 当伽马系数大于1时,图像高灰度区域得到增强。 当伽马系数小于1时,图像低灰度区域得到增强。 当伽马系数等于1时,图像线性变换。 4)图像取反 方法1:直接取反 imgPath = 'E:\opencv_pic\src_pic\pic2.bmp'; img1 = imread(imgPath); % 前景图 img0 = 255-img1; % 取反景图 subplot(1,2,1),imshow(img1),title('原始图像'); subplot(1,2,2),imshow(img0),title('取反图像'); 方法2:伽马变换 Matlab:imadjust(f, [low

OpenCV python 图片二值化

六月ゝ 毕业季﹏ 提交于 2020-01-28 07:50:29
OpenCV python 图片二值化 处理原图[source.jpg] 代码: import cv2 def main ( ) : # 1.导入图片 转换为灰度图片 img_src = cv2 . imread ( "source.jpg" ) img_gray = cv2 . cvtColor ( img_src , cv2 . COLOR_BGR2GRAY ) # 2.执行二值化 thr , img_rst = cv2 . threshold ( img_gray , 127 , 255 , cv2 . THRESH_BINARY ) # 3.显示结果 print ( "thr=" , thr ) cv2 . imshow ( "img_src" , img_src ) cv2 . imshow ( "img_rst" , img_rst ) cv2 . waitKey ( ) cv2 . destroyAllWindows ( ) if __name__ == '__main__' : main ( ) 结果图片: 来源: CSDN 作者: 廷益--飞鸟 链接: https://blog.csdn.net/weixin_45875105/article/details/103641762

基于Tesseract—OCR技术的文字识别优化

假如想象 提交于 2020-01-26 23:48:05
一、需求分析 对天猫平台的企业信息采集下来进行结构化处理,提取出文字信息后汇总进Excel作为交付文件。 主要的功能设计如下: 1、程序能够自动读取企业工商信息图片所在的文件夹路径,并从文件夹路径中顺序取出图片进行识别,最终的识别结果以一份汇总的Excel交付。 2、因为天猫平台公示的图片内容没有固定格式,所以需要程序能匹配不同格式的图片内容提取信息。 3、能够提取出图片中的企业注册号、企业名称数据项,企业注册号、企业名称数据项要进行分析处理。 4、识别准确率需要保证在95%以上。 5、识别速度保持在60秒识别50张图片。 二、本程序处理图片方面的关键模块 1、对图片进行切割: 要求识别的文字信息“企业名称”“企业注册号”位于整个图片的其中一部分,把剩余部分切除,只留下关键信息部分,不但可以提高识别速度,还可提升识别率。 2、在进行图片的二值化时,有两种方式: (1)图片为彩色时,宜找到每个像素点合适的灰色度,因为每个像素点的灰色度不同程度上受到周边像素加权影响,从而影响整个图片的识别率。比如本像素点加上周围8个灰度值再除以9,算出其相对灰度值。 (2)图片为黑白色时,宜采用max-min方法对图片进行二值化。 针对本程序识别的图片的黑白色对比明显,故采用max-min方法进行二值化。 private static File binaryImage(File orcFile)

# opencv学习笔记 (一)## 识别颜色块并且标定轮廓和中心

放肆的年华 提交于 2020-01-18 00:08:17
某男子学院初学小白,刚开始学习opencv一周,直接从做项目和参考代码开始 要做的就是识别这张图片中指定颜色的多边形并且标定轮廓和中心 思路如下: 1.提取颜色根据不同颜色所具有的不同的hsv范围。 2.将图片转化成hsv格式,通过hsv范围提取指定颜色图形转化成 二值化图像 。 3.获得的二值化图像难免产生椒盐噪声,这时候我们可以运用 循环中值滤波 形态学滤波去除 ( 核心函数morphologyEx ) 参考代码: //针对二值化图像的处理降噪 Mat kernel = getStructuringElement(MORPH_RECT, Size(8,8)); //创建结构元素大小为8*8 medianBlur(pict2, pict2, 7); //中值滤波 morphologyEx(pict2, pict2, MORPH_OPEN, kernel); //开操作 morphologyEx(pict2, pict2, MORPH_CLOSE, kernel); //闭操作 blur(pict2, pict2, Size(3, 3)); //均值滤波 4.根据获得的二值化图像检测边缘( Canny函数 ),查找轮廓( findContours函数 ),然后可以根据公式计算轮廓矩和轮廓中心。 部分参考代码: vector<Moments> mu(contours.size());

学霸笔记

霸气de小男生 提交于 2020-01-16 18:42:58
北邮摄像头 一、摄像头基本原理 我们的像素是多少 不需要太大的像素,不然会降低接受图像速度 提高帧数,降低像素 中断处理 PCLK像素值、HREF行、VSYNC场:一场一zhen 1、用到的就是行中断和场中断 行\场中断:需要用到外部引脚中断,同步 DMA传输:一般:外设到CPU到内存;DMA:由DMA控制器直接向外设取数据,此时CPU就只需要等待DMA完成接受的信号 中断处理:行中断来了,存到一个数组里,行到达像素高度,行中断清零,场中断,盯着 Field_Over_Flag=1 当然,直接接受场中断就更好了 2、图像采集优化 没记 二、摄像头图像处理 1.1、图像二值化 根据环境在出发前设定固定阈值:小于阈值直接设成白色(0) 通过OLED打印,通过按键对于图像二值化阈值进行调整 大津法,遍历阈值,发现方差最大 2、赛道边线提取 2.1 图像校正 获取摄像头视野角度,水平倾角,高度 计算实际图像与获取图像的XY坐标对应关系 对于缺失值进行 加权来计算缺失点计算量太大,只需要关键点(比如:赛道边缘什么) 2.2 赛道中心提取 2.2.1 常规赛道 捕捉赛道左侧右侧边缘坐标 计算梯度幅度和方向;保留局部梯度最大的点,已得到细化的边缘 2.2.2 特殊赛道 环岛识别检测、十字交叉路口 找出关键特征 三、摄像头代码框架 1、main.c 关闭总中断,防止初始化失败,初始化结束,就开中断