精华内容
下载资源
问答
  • (三)OpenCV图像分割python

    千次阅读 2019-01-07 19:03:29
    灰度阈值化,简单,速度快,广泛应用于硬件图像处理,如FPGA实时图像处理. 1.2 适用场景 图片中各物体不接触,且物体和背景的灰度值差别较明显,灰度阈值处理效果较好; 2 基于边缘 边缘检测的结果是点,不能作为图像...

    0 环境

    • Ubuntu18.04
    • Python3.6
    • OpenCV3.2.0

    引入opencv

    import cv2
    

    1 基于阈值

    1.0 小序

    灰度阈值化,简单,速度快,广泛应用于硬件图像处理,如FPGA实时图像处理.

    1.2 适用场景

    图片中各物体不接触,且物体和背景的灰度值差别较明显,灰度阈值处理效果较好;
    waterShed算法

    def waterShed(sourceDir):
    	# 读取图片
    	img = cv2.imread(sourceDir)
    	# 原图灰度处理,输出单通道图片
    	gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    	# 二值化处理Otsu算法
    	reval_O, dst_Otsu = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY_INV | cv2.THRESH_OTSU)
    	# 二值化处理Triangle算法
    	reval_T, dst_Tri = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY_INV | cv2.THRESH_TRIANGLE)
    	# 滑动窗口尺寸
    	kernel = np.ones((3, 3), np.uint8)
    	# 形态学处理:开处理,膨胀边缘
    	opening = cv2.morphologyEx(dst_Tri, cv2.MORPH_OPEN, kernel, iterations=2)
    	# 膨胀处理背景区域
    	dilate_bg = cv2.dilate(opening, kernel, iterations=3)
    	# 计算开处理图像到邻域非零像素距离
    	dist_transform = cv2.distanceTransform(opening, cv2.DIST_L2, 5)
    	# 正则处理
    	norm = cv2.normalize(dist_transform, 0, 255, cv2.NORM_MINMAX)
    	# 阈值处理距离图像,获取图像前景图
    	retval_D, dst_fg = cv2.threshold(dist_transform, 0.5*dist_transform.max(), 255, 0)
    	# 前景图格式转换
    	dst_fg = np.uint8(dst_fg)
    	# 未知区域计算:背景减去前景
    	unknown = cv2.subtract(dilate_bg, dst_fg)
    	cv2.imshow("Difference value", unknown)
    	cv2.imwrite('./images/saved/unknown_reginon.png', unknown)
    	# 处理连接区域
    	retval_C, marks = cv2.connectedComponents(dst_fg)
    	cv2.imshow('Connect marks', marks)
    	cv2.imwrite('./images/saved/connect_marks.png', marks)
    	# 处理掩模
    	marks = marks + 1
    	marks[unknown==255] = 0
    	cv2.imshow("marks undown", marks)
    	# 分水岭算法分割
    	marks = cv2.watershed(img, marks)
    	# 绘制分割线
    	img[marks == -1] = [255, 0, 255]
    	cv2.imshow("Watershed", img)
    	cv2.imwrite('./images/saved/watershed.png', img)
    	cv2.waitKey(0)
    sourceDir = "./images/reading/water_coins.jpg"
    waterShed(sourceDir)
    

    背景图和前景图.


    黑色背景 白色前景

    图1.0 黑色部分背景图(左)白色部分前景图(右)

    未知区域和分割图.


    在这里插入图片描述 分割

    图1.2 未知区域(左)分割图(右)

    2 基于边缘

    边缘检测的结果是点,不能作为图像分割结果,需要进一步处理,将边缘点沿着图形边界连接,形成边缘链.
    检测算子:
    Sobel,Laplace, Canny
    寻找轮廓:
    findContours

    def cutImage(sourceDir):
    	# 读取图片
    	img = cv2.imread(sourceDir)
    	# 灰度化
    	gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    	# 高斯模糊处理:去噪(效果最好)
    	blur = cv2.GaussianBlur(gray, (9, 9), 0)
    	# Sobel计算XY方向梯度
    	gradX = cv2.Sobel(gray, ddepth=cv2.CV_32F, dx=1, dy=0)
    	gradY = cv2.Sobel(gray, ddepth=cv2.CV_32F, dx=0, dy=1)
    	# 计算梯度差
    	gradient = cv2.subtract(gradX, gradY)
    	# 绝对值
    	gradient = cv2.convertScaleAbs(gradient)
    	# 高斯模糊处理:去噪(效果最好)
    	blured = cv2.GaussianBlur(gradient, (9, 9), 0)
    	# 二值化
    	_ , dst = cv2.threshold(blured, 90, 255, cv2.THRESH_BINARY)
    	# 滑动窗口
    	kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (107, 76))
    	# 形态学处理:形态闭处理(腐蚀)
    	closed = cv2.morphologyEx(dst, cv2.MORPH_CLOSE, kernel)
    	# 腐蚀与膨胀迭代
    	closed = cv2.erode(closed, None, iterations=4)
    	closed = cv2.dilate(closed, None, iterations=4)
    	# 获取轮廓
    	_, cnts, _ = cv2.findContours(closed.copy(), cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)
    	c = sorted(cnts, key=cv2.contourArea, reverse=True)[0]
    	rect = cv2.minAreaRect(c)
    	box = np.int0(cv2.boxPoints(rect))
    	draw_img = cv2.drawContours(img.copy(), [box], -1, (0, 0, 255), 3)
    	cv2.imshow("Box", draw_img)
    	cv2.imwrite('./images/saved/monkey.png', draw_img)
    	cv2.waitKey(0)
    sourceDir = "./images/reading/monkey1.jpg"
    cutImage(sourceDir)
    

    原图与结果图.


    source Result

    图2.1 原图(左)结果图(右)

    3 基于区域

    grabCut算法

    def grab_cut(sourceDir):
    	# 读取图片
    	img = cv2.imread(sourceDir)
    	# 图片宽度
    	img_x = img.shape[1]
    	# 图片高度
    	img_y = img.shape[0]
    	# 分割的矩形区域
    	rect = (96,1, 359, 358)
    	# 背景模式,必须为1行,13x5列
    	bgModel = np.zeros((1, 65), np.float64)
    	# 前景模式,必须为1行,13x5列
    	fgModel = np.zeros((1, 65), np.float64)
    	# 图像掩模,取值有0,1,2,3
    	mask = np.zeros(img.shape[:2], np.uint8)
    	# grabCut处理,GC_INIT_WITH_RECT模式
    	cv2.grabCut(img, mask, rect, bgModel, fgModel, 4, cv2.GC_INIT_WITH_RECT)
    	# grabCut处理,GC_INIT_WITH_MASK模式
    	# cv2.grabCut(img, mask, rect, bgModel, fgModel, 4, cv2.GC_INIT_WITH_MASK)
    	# 将背景0,2设成0,其余设成1
    	mask2 = np.where((mask==2) | (mask==0), 0, 1).astype('uint8')
    	# 重新计算图像着色,对应元素相乘
    	img = img*mask2[:, :, np.newaxis]
    	cv2.imshow("Result", img)
    	cv2.waitKey(0)
    sourceDir = "./images/reading/bird2.png"
    grab_cut(sourceDir)
    

    原图与结果图


    在这里插入图片描述 在这里插入图片描述

    图3 原图(左) 结果图(右)

    4 问题

    grabCut(img, mask, rect, bgModel, fgModel, iterCount, cv2.GC_INIT_WITH_MASK)
    
    OpenCV Error: Assertion failed (!bgdSamples.empty() && !fgdSamples.empty()) in initGMMs, file /build/opencv-L2vuMj/opencv-3.2.0+dfsg/modules/imgproc/src/grabcut.cpp, line 379
    cv2.error: /build/opencv-L2vuMj/opencv-3.2.0+dfsg/modules/imgproc/src/grabcut.cpp:379: error: (-215) !bgdSamples.empty() && !fgdSamples.empty() in function initGMMs
    

    grabCut不能使用GC_INIT_WITH_MASK切割图片,我也佷无奈.

    5 总结

    • 还在学习阶段,该篇为笔记记录,借鉴较多.

    [参考文献]
    [1]https://www.cnblogs.com/xinxue/archive/2017/07/08/5350746.html
    [2]https://blog.csdn.net/qq_29300341/article/details/79026392
    [3]https://blog.csdn.net/sinat_36458870/article/details/78825571


    展开全文
  • Python-OpenCV 笔记8 – PIL.Image和OpenCV图像格式转换 1、PIL.Image 转 OpenCV import cv2 from PIL import Image import numpy # 用 PIL.Image 打开图片 image = Image.open('1.jpg') # 转为 ...

    Python-OpenCV 笔记8 – PIL.Image和OpenCV图像格式转换


    1、PIL.Image 转 OpenCV

    import cv2
    from PIL import Image
    import numpy 
    
    # 用 PIL.Image 打开图片
    image = Image.open('1.jpg')
    
    # 转为 OpenCV 图像格式
    img = cv2.cvtColor(numpy.asarray(image), cv2.COLOR_RGB2BGR)
    
    # OpenCV 保存图片
    cv2.imwrite('1.png', img)
    

    2、OpenCV 转 PIL.Image

    import cv2
    from PIL import Image
    import numpy
     
    # 用 OpenCV 打开图片
    img = cv2.imread('1.jpg')
    
    # 转为 PIL.Image 图像格式
    image = Image.fromarray(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))
    
    # PIL.Image 保存图片
    image.save('1.png')
    

    3、作用

    问题: OpenCV 不能打开路径带有中文的图片
    解决: PIL.Image 能打开路径带有中文的图片,先用 PIL.Image 打开图片再转为 OpenCV 的图像格式。


    展开全文
  • Python+OpenCV实时图像处理

    万次阅读 多人点赞 2020-01-04 23:09:35
    初学OpenCV图像处理的小伙伴肯定对什么高斯函数、滤波处理、阈值二值化等特性非常头疼,这里给各位分享一个小项目,可通过摄像头实时动态查看各类图像处理的特点,也可对各位调参、测试有一定帮助。
    展开全文
  • python中PIL.Image和OpenCV图像格式相互转换

    万次阅读 多人点赞 2017-10-01 13:16:45
    PIL.Image转换成OpenCV格式 import cv2 from PIL import Image import numpy image = Image.open("plane.jpg") image.show() img = cv2.cvtColor(numpy.asarray(image),cv2.COLOR_RGB2BGR) cv2.imshow("OpenCV",...

    PIL.Image转换成OpenCV格式

    import cv2
    from PIL import Image
    import numpy
    
    image = Image.open("plane.jpg")
    image.show()
    img = cv2.cvtColor(numpy.asarray(image),cv2.COLOR_RGB2BGR)
    cv2.imshow("OpenCV",img)
    cv2.waitKey()
    

     

    OpenCV转换成PIL.Image格式

    import cv2
    from PIL import Image
    import numpy
    
    img = cv2.imread("plane.jpg")
    cv2.imshow("OpenCV",img)
    image = Image.fromarray(cv2.cvtColor(img,cv2.COLOR_BGR2RGB))
    image.show()
    cv2.waitKey()
    

     

    判断图像数据是否是OpenCV格式

    isinstance(img, np.ndarray)

     

     

    判断OpenCV版本是2还是3或4

    import cv2
    import imutils   #若没有包使用 pip install imutils 安装
    
    if imutils.is_cv2():
        print("OpenCV2")
    
    if imutils.is_cv3():
        print("OpenCV3")
    
    if imutils.is_cv4():
        print("OpenCV4")

     

    展开全文
  • PIL.Image转换成OpenCV格式: import cv2 from PIL import Image import numpy   image = Image.open("plane.jpg") image.show() img = cv2.cvtColor(numpy.asarray(image),cv2.COLOR_RGB2BGR) cv2....
  • 图像处理器-OpenCVPython 中使用 OpenCV 进行图像相似性和特征检测
  • 本专栏主要介绍如果通过OpenCv-Python进行图像处理,通过原理理解OpenCv-Python的函数处理原型,在具体情况中,针对不同的图像进行不同等级的、不同方法的处理,以达到对图像进行去噪、锐化等一系列的操作。...
  • 本专栏主要介绍如果通过OpenCv-Python进行图像处理,通过原理理解OpenCv-Python的函数处理原型,在具体情况中,针对不同的图像进行不同等级的、不同方法的处理,以达到对图像进行去噪、锐化等一系列的操作。...
  • Python+Opencv图像处理图片
  • opencv图像基础操作(python版),opencv的一些最基本的操作,可供初学者参考,IDE为VS2017
  • [Python图像处理]一 :Opencv-python的简介及环境搭建一、为什么选择opencv-python1、什么是OpenCv-Python?2、为什么选择OpenCv-Python二、opencv-python的环境搭建1、python环境搭建2、Jupyter环境搭建3、opencv-...
  • 本专栏主要介绍如果通过OpenCv-Python进行图像处理,通过原理理解OpenCv-Python的函数处理原型,在具体情况中,针对不同的图像进行不同等级的、不同方法的处理,以达到对图像进行去噪、锐化等一系列的操作。...
  • OpenCV图像相似度检测,Python实现

    千次阅读 2020-05-20 08:20:35
    # OpenCV图像相似度检测matchTemplate,Python实现 import cv2 as cv if __name__ == "__main__": # 先把图片灰度处理。 img = cv.imread('pic.jpg') img_gray = cv.cvtColor(img, cv.COLOR_BGR2GRA.
  • 高级图像拼接也叫作基于特征匹配的图像拼接,拼接时消去两幅图像相同的部分,实现拼接合成全景图。这篇文章主要介绍了python opencv 图像拼接,需要的朋友可以参考下
  • python OpenCV图像进行 二值化(黑白化),然后返回黑白图像
  • 下面小编就为大家分享一篇python opencv 图像尺寸变换方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • python opencv 图像拼接

    万次阅读 多人点赞 2018-08-21 10:24:24
    初级的图像拼接为将两幅图像简单的粘贴在一起,仅仅是图像几何空间的转移与合成,与图像内容无关。高级图像拼接也叫作基于特征匹配的图像拼接,拼接时消去两幅图像相同的部分,实现拼接合成全景图。 具有相同尺寸的...
  • 本专栏主要介绍如果通过OpenCv-Python进行图像处理,通过原理理解OpenCv-Python的函数处理原型,在具体情况中,针对不同的图像进行不同等级的、不同方法的处理,以达到对图像进行去噪、锐化等一系列的操作。...
  • 图像处理-OpenCV-pythonPython中使用OpenCV进行图像处理
  • Python+OpenCV图像处理(一)——OpenCV框架与图像插值算法 Python+OpenCV图像处理(二)——几何变换 Python+OpenCV图像处理(三)——彩色空间互换 目录四、图像滤波4.1 简介 四、图像滤波 4.1 简介 ...
  • 主要介绍了Python OpenCV图像指定区域裁剪的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
  • Python+OpenCV图像处理(一)——OpenCV框架与图像插值算法 目录图像处理一、OpenCV框架与图像插值算法1.1 OpenCV简介1.2 图像插值算法1.3 resize函数1.4 代码实现 图像处理 图像处理(image processing),用计算机...
  • Python+OpenCV图像处理实验

    万次阅读 多人点赞 2020-05-05 17:21:12
    该项目可实现图像的多样化处理,基本上包含了OpenCV模块常用的图像处理功能,非常适合初学者理解和应用,包括:灰度化功能、反转功能、通道分离功能、噪音滤波功能、高斯双边滤波功能、均值偏移滤波功能、图像二值化...
  • OpenCV-Python图形图像处理专栏文章目录

    千次阅读 多人点赞 2020-10-19 21:52:06
    OpenCV-Python setMouseCallback回调函数中图像变量img的传递方法解析 OpenCV-Python图像乘法运算cv2.multiply函数详解及像素值溢出归一化处理 OpenCV-Python图像位与运算bitwise_and函数详解 OpenCV-Python图像的...
  • 图像配准 - 三张RGB灰度图合成彩色图 ECC算法 OpenCV C++/Python实现
  • python opencv 图像尺寸变换

    千次阅读 2017-07-19 19:53:43
    python opencv 图像尺寸变换

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 73,798
精华内容 29,519
关键字:

opencv图像格式python

python 订阅