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基础与入门教程

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • spring springMVC mybatis_javaweb servlet

    spring springMVC mybatis_javaweb servlet资源下载:https://download.csdn.net/download/weixin_44893902/45601185练习点设计:修改、删除一、语言和环境实现语言:JAVA语言。环境要求:MyEclipse/Eclipse+Tomcat+MySql。使用技术:Jsp+Servlet+JavaBean或SpringMVC+Spring+Mybatis。二、实现功能随着网上购物越来越多,电子订单也日益增多,特需要网上购物系统:1.首页默认显示所有订单信息,如.

  • java实现邮件发送_显示对方是qq邮箱发短信

    java实现邮件发送_显示对方是qq邮箱发短信java实现手机短信和邮箱推送

    2022年10月13日
  • log4j2的使用_logback log4j

    log4j2的使用_logback log4j一、目录简介基础部分日志框架简单比较(slf4j、log4j、logback、log4j2)log4j2基础知识log4j2实用配置实战部分slf4j+log4j2实际使用二、日志框架比较(slf4j、log4j、logback、log4j2)日志接口(slf4j)slf4j是对所有日志框架制定的一种规范、标准、接口,并不是一个框架的具体的实现,因为接口并不能独立使

  • 数据库的概念模型,联系,E-R模型的设计方法「建议收藏」

    概念模型的基本概念:表示概念模型的最常用模型是实体-联系模型(Entity-RelationshipModel,简称E-R模型)E-R模型中,数据的结构被表示为“实体-联系”图。(E-R图)图中有三个主要的元素类型:实体集,属性和联系。联系:两个实体集之间的联系可归纳为以下三类:1)一对一联系(1:1) 2)一对多联系(1:n)和多对一联系(n:1)3)多对多联…

  • 使用npm安装yarn命令

    使用npm安装yarn命令’yarn’不是内部或外部命令,也不是可运行的程序或批处理文件。解决方法:全局安装:npminstall-gyarn检查是否安装成功:yarn-v

  • 一个空间主机安装多个网站的方法

    一个空间主机安装多个网站的方法

发表回复

您的电子邮箱地址不会被公开。

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