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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • java断言assertequals_junit 方法:assertEquals 和 assertTrue

    java断言assertequals_junit 方法:assertEquals 和 assertTrueassertEquals和assertTrue区别相同之处:都能判断两个值是否相等assertTrue如果为true,则运行success,反之FailureassertEquals如果预期值与真实值相等,则运行success,反之Failure不同之处:assertEquals运行Failure会有错误提示,提示预期值是xxx,而实际值是xxx。容易调式assertTrue没有错误…

    2022年7月13日
    10
  • Django(9)url指定默认参数「建议收藏」

    Django(9)url指定默认参数「建议收藏」前言当我们访问网页的时候,后台返回列表中有n条数据,此时我们会使用分页,比如一页只展示10条,但是我们访问第一页的时候大多数情况下,都会给url一个默认值,访问的时候直接展示第一页数据案例我们的

    2022年8月7日
    5
  • 实用ExtJS教程100例-003:进度条对话框Ext.MessageBox.progress

    实用ExtJS教程100例-003:进度条对话框Ext.MessageBox.progress在上一篇内容中我们介绍了三种常用的MessageBox提示框,在这篇文章中,我们将演示如何在对话框中使用进度条。进度条对话框我们可以使用下面的代码来在MessageBox中显示一个进度条:Ext.get(“btn4”).on(“click”,function(){Ext.MessageBox.progress(“进度”,”…

    2022年6月19日
    24
  • ca证书 csr_SSL证书CSR文件生成方式及注意事项

    ca证书 csr_SSL证书CSR文件生成方式及注意事项原标题 SSL 证书 CSR 文件生成方式及注意事项 SSL 证书中 CSR 文件是指什么 CSR 生成方式如何选择 CSR 有什么作用 生成 CSR 文件方法有哪些 SSL 大全网 ssldaquan com 来详细说下 SSL 证书中 CSR 文件的详细作用及 CSR 生成方式及注意事项 什么是 CSR 文件 CSR CertificateS 是证书签名请求文件 包含了您的服务器信息和公司信息 申请证书

    2025年7月11日
    2
  • sql中的联合查询「建议收藏」

    sql中的联合查询「建议收藏」我们在实际应用中,或许会用到关于sql的联合查询的应用,下面来总结一下联合查询的具体应用,做一下记录便于记忆。首先,通过一个实例来讲一下联合查询(关键词union)语法:select………unionselect……..union…….select*fromempoloyeeswhereemaillike”%a%”ordepartment_id>90;改用union的用法select*fromempol

    2022年5月12日
    39
  • CTF misc之流量分析题套路总结[通俗易懂]

    CTF misc之流量分析题套路总结[通俗易懂]1.前言昨天去I春秋刷了几题流量分析题,然后总结了一下流量分析题的做题方法。2.刷题2.1可恶的黑客步骤一、HTTP追踪流先了解进行什么操作可以看到是传了webshell然后进行文件操作套路1:一般是传webshell然后菜刀连接,参数进行base64位加密,先解密参数,了解进行了什么操作一步步解密请求参数了解进行什么操作这个是传webshell里

    2022年4月30日
    307

发表回复

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

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