opencv3编程入门_java基础与入门教程

opencv3编程入门_java基础与入门教程——韦访 201810111、概述想学习图像处理,不管是机器学习也好,深度学习也好,不会点OpenCV好像有点说不过去吧?所以,现在开始OpenCV的学习。2、读写图片先从图片的读写开始,opencv读取图片的函数是imread,默认情况下,imread函数返回BGR格式的图像,可以用imwrite函数将数据写到本地。下面的代码会将JPG图片转成PNG。import…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

——韦访 20181011

1、概述

想学习图像处理,不管是机器学习也好,深度学习也好,不会点OpenCV好像有点说不过去吧?所以,现在开始OpenCV的学习。

2、读写图片

先从图片的读写开始,opencv读取图片的函数是imread,默认情况下,imread函数返回BGR格式的图像,可以用imwrite函数将数据写到本地。下面的代码会将JPG图片转成PNG。

import cv2
image = cv2.imread('dog.jpeg')
cv2.imwrite('dog.png', image)

运行结果:

opencv3编程入门_java基础与入门教程

如果想将图片通过OpenCV的窗口显示,则调用imshow函数,注意在代码末尾加上waitkey函数,否则窗口就直接关闭了,不知道的还以为imshow函数没起作用。代码如下,

import cv2
image = cv2.imread('dog.jpeg')
cv2.imwrite('dog.png', image)
cv2.imshow('dog', image)
cv2.waitKey(0)

运行结果:

opencv3编程入门_java基础与入门教程

上面提到,imread默认返回的是BGR图片,我们也可以通过设置参数,让其返回一个灰度图片,代码如下,

import cv2
image = cv2.imread('dog.jpeg', flags=cv2.IMREAD_GRAYSCALE)
cv2.imshow('dog', image)
cv2.waitKey(0)

运行结果:

opencv3编程入门_java基础与入门教程

3、高通滤波器

高通滤波器(HPF)是检测图像的某个区域,根据该像素与周围像素的亮度差值来提升该像素的亮度的滤波器。下面来举个例子,代码如下,

import cv2
import numpy as np
from scipy import ndimage

kernel_3x3 = np.array([
    [-1, -1, -1],
    [-1, 8, -1],
    [-1, -1, -1],
])

kernel_5x5 = np.array([
    [-1, -1, -1, -1, -1],
    [-1, -1,  2, -1, -1],
    [-1,  2,  4,  2, -1],
    [-1, -1,  2, -1, -1],
    [-1, -1, -1, -1, -1],
])

img = cv2.imread('sea.jpg', flags=cv2.IMREAD_GRAYSCALE)
k3 = ndimage.convolve(img, kernel_3x3)
k5 = ndimage.convolve(img, kernel_5x5)

GBlur = cv2.GaussianBlur(img, (11, 11), 0)
g_hpf = img - GBlur

cv2.imshow('img', img)
cv2.imshow('3x3', k3)
cv2.imshow('5x5', k5)
cv2.imshow('g_hpf', g_hpf)
cv2.waitKey()
cv2.destroyAllWindows()

opencv3编程入门_java基础与入门教程

4、低通滤波器

低通滤波器则在像素与周围像素的亮度差值小于一个特定值时,平滑该像素的亮度,主要用于去噪和模糊化。

 

5、边缘检测

边缘检测不管是在人类视觉还是计算机视觉中都是非常重要的,我们能识别物体,就是靠边缘。这个很容易理解,夜晚很黑什么都看不到,不就是因为没看到物体的边缘吗?

OpenCV提供了很多边缘检测的滤波函数,比如,Laplacian, Sobel, Scharr, Canny等。这些函数会将非边缘区域转为黑色,将边缘区域转为白色或其他颜色。但是,这些函数容易将噪声错误的失败为边缘,所以,在边缘检测之前,应该对图像进行模糊处理。

OpenCV提供了很多模糊滤波器,比如blur, medianBlur, GausianBlur等,边缘检测滤波器和模糊滤波器总有一个ksize参数,这个参数表示滤波核的宽高,是一个奇数。还是来个代码吧,

import cv2

img = cv2.imread('car.jpg', flags=cv2.IMREAD_GRAYSCALE)
GBlur = cv2.GaussianBlur(img, (3, 3), 0)
canny = cv2.Canny(GBlur, 50, 150)
cv2.imshow('img', img)
cv2.imshow('canny', canny)
cv2.waitKey(0)
cv2.destroyAllWindows()

运行结果,

opencv3编程入门_java基础与入门教程

6、边界框、最小矩形区域、最小闭圆的轮廓

实际应用中经常会对目标的边界框、最小矩形区域、最小闭圆特别感兴趣。用cv2.findContours函数很容易实现上述功能。上代码,

#encoding:utf-8
import cv2
import numpy as np

#读取图片
img = cv2.imread('Picture1.png', cv2.IMREAD_UNCHANGED)
#降低分辨率,也可以不降低
# img = cv2.pyrDown(img)

#对图像进行二值化操作
ret, thresh = cv2.threshold(cv2.cvtColor(img.copy(), cv2.COLOR_BGR2GRAY), 127, 255, cv2.THRESH_BINARY)

#检测轮廓,
#输入的三个参数分别为:输入图像、层次类型、轮廓逼近方法
#因为这个函数会修改输入图像,所以上面的步骤使用copy函数将原图像做一份拷贝,再处理
#返回的三个返回值分别为:修改后的图像、图轮廓、层次
image, contours, hier = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

for c in contours:
    #边界框
    x, y, w, h = cv2.boundingRect(c)
    cv2.rectangle(img, (x, y), (x + w, y + h), (0, 255, 0), 2)

    #最小矩形区域
    rect = cv2.minAreaRect(c)
    box = cv2.boxPoints(rect)
    box = np.int0(box)
    cv2.drawContours(img, [box], 0, (0, 0, 255), 3)
    
    #最小闭圆
    (x, y), radius = cv2.minEnclosingCircle(c)
    center = (int(x), int(y))
    radius = int(radius)
    img = cv2.circle(img, center, radius, (255, 0, 0), 2)

cv2.imshow('image', image)
cv2.drawContours(img, contours, -1, (255, 0, 0), 1)
cv2.imshow("contours", img)
cv2.waitKey(0)

运行结果:

opencv3编程入门_java基础与入门教程

总结:

基础知识先学这么多,后续再通过实例慢慢学,本来想加上摄像头的操作,无奈电脑没有摄像头,已经在淘宝了,后续实例中再补了。

 

 

如果您感觉本篇博客对您有帮助,请打开支付宝,领个红包支持一下,祝您扫到99元,谢谢~~

opencv3编程入门_java基础与入门教程

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/186518.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • dpkg说明_dpkg命令

    dpkg说明_dpkg命令dpkg与centos中的rpm相似,被用于安装,卸载及查询deb包信息。下面简单介绍基础命令。已有安装包:test.deb。安装命令:dpkg-itest.deb安装test.deb软件包dpkg-ctest.deb#查看test.deb软件包中包含的文件结构安装后查询命令:dpkg-Itest查看已安装的test.deb软件包的详细信息,包括软件名称、版本等dpkg-Ltest#查看已安装test.deb软件包安装的所有文件dpkg-stest#查看test.

    2022年10月7日
    2
  • MySQL数据库备份和恢复方案小结[通俗易懂]

    MySQL数据库备份和恢复方案小结[通俗易懂]这两天在调研MySQL数据库的备份和恢复方案,备份对象是对大量Innodb表,或者加上少量的MyISAM表。 InnoDB备份常见问题:文件一致性:数据文件、缓存、日志文件必须保持严格一致。加锁的方法没法保证一致性,因为InnoDB后台刷新数据是异步进行的。数据一致性:不能一次锁住一张表,这个备份的是不同时刻的表数据;如果一次锁住所有表,innodb的mvcc机制会增加undo日志…

    2022年6月6日
    28
  • 终于找到YST的BLOG了!!!!

    终于找到YST的BLOG了!!!!呵呵,总算找到了!http://city.udn.com/3011/2864195

    2022年7月11日
    16
  • tcp握手失败怎么办_TCP协议握手

    tcp握手失败怎么办_TCP协议握手大家好,我是小林。之前收到个读者的问题,对于TCP三次握手和四次挥手的一些疑问:第一次握手,如果客户端发送的SYN一直都传不到被服务器,那么客户端是一直重发SYN到永久吗?客户端停止重发SYN的时机是什么?第三次握手,如果服务器永远不会收到ACK,服务器就永远都留在Syn-Recv状态了吗?退出此状态的时机是什么?第三次挥手,如果客户端永远收不到FIN,ACK,客户端永远停留在Fin-Wait-2状态了吗?退出此状态时机是什么时候呢?第四次挥手,如果服务器永远收不到A

    2025年9月2日
    8
  • Centos SSH暴力破解[通俗易懂]

    http://www.manongjc.com/article/39585.htmlhttps://www.jianshu.com/p/9d56a25b976ahttps://www.iteye.com/blog/sxlkk-2435700https://blog.csdn.net/luoxiandong2/article/details/73739304fastjson是…

    2022年4月8日
    200
  • 电脑蓝屏错误代码0x000000ED_电脑蓝屏0*000000ed怎么解决

    电脑蓝屏错误代码0x000000ED_电脑蓝屏0*000000ed怎么解决电脑蓝屏的原因很多,不同的电脑蓝屏显示的代码不同,对应的解决方法也不同。最近就有网友说自己的电脑蓝屏代码0x000000ed怎么办,不知道0x000000ed是什么意思。今天小编就教下大家修复电脑蓝屏代码0x000000ed的解决方法。0x000000ed蓝屏原因:说明I/0子系统试图加载到引导卷时失败。一般因为不正常断电导致的硬盘故障,从而导致启动时不能正常加载。具体的解决方法如下:1、先开机按f8看能否进入安全模式,能够进入的话,打开运行/输入CMD,键入命令chkdsk/f/r回…

    2022年10月8日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号