例子源于OpenCV官网–图像的矩
(https://docs.opencv.org/4.x/d0/d49/tutorial_moments.html)

使用OpenCV函数cv::moments:
计算多边形或栅格化形状的三阶以内的所有力矩。该函数计算矢量形状或栅格形状的三阶力矩。以字典(Dict)形式返回图像的矩。

使用OpenCV函数cv::contourArea:
该函数计算等高线面积。

使用OpenCV函数cv::arcLength:
该函数计算曲线长度或封闭轮廓周长。

代码:


from __future__ import print_function
from __future__ import division
import cv2 as cv
import numpy as np
import argparse
import random as rng
rng.seed(12345)
def thresh_callback(val):threshold = val#canny检测边缘轮廓canny_output = cv.Canny(src_gray, threshold, threshold * 2)#找轮廓contours, _ = cv.findContours(canny_output, cv.RETR_TREE, cv.CHAIN_APPROX_SIMPLE)# Get the momentsmu = [None]*len(contours)for i in range(len(contours)):mu[i] = cv.moments(contours[i])# Get the mass centers得到质心mc = [None]*len(contours)for i in range(len(contours)):# add 1e-5 to avoid division by zero加1e-5以避免被零除mc[i] = (mu[i]['m10'] / (mu[i]['m00'] + 1e-5), mu[i]['m01'] / (mu[i]['m00'] + 1e-5))# Draw contours画轮廓drawing = np.zeros((canny_output.shape[0], canny_output.shape[1], 3), dtype=np.uint8)for i in range(len(contours)):color = (rng.randint(0,256), rng.randint(0,256), rng.randint(0,256))cv.drawContours(drawing, contours, i, color, 2)cv.circle(drawing, (int(mc[i][0]), int(mc[i][1])), 4, color, -1)cv.imshow('Contours', drawing)# Calculate the area with the moments 00 and compare with the result of the OpenCV function#利用矩00计算面积,并与OpenCV函数的结果进行比较for i in range(len(contours)):print(' * Contour[%d] - Area (M_00) = %.2f - Area OpenCV: %.2f - Length: %.2f' % (i, mu[i]['m00'], cv.contourArea(contours[i]), cv.arcLength(contours[i], True)))
parser = argparse.ArgumentParser(description='Code for Image Moments tutorial.')
parser.add_argument('--input', help='Path to input image.', default='monster.jpg')
args = parser.parse_args()
src = cv.imread(cv.samples.findFile(args.input))
if src is None:print('Could not open or find the image:', args.input)exit(0)
# Convert image to gray and blur it 图像转换为灰度并模糊处理
src_gray = cv.cvtColor(src, cv.COLOR_BGR2GRAY)
src_gray = cv.blur(src_gray, (3,3))
source_window = 'Source'
cv.namedWindow(source_window)
cv.imshow(source_window, src)
max_thresh = 255
thresh = 100 # initial threshold初始阈值
cv.createTrackbar('Canny Thresh:', source_window, thresh, max_thresh, thresh_callback)
thresh_callback(thresh)
cv.waitKey()

原图:

运行结果:


【OpenCV入门学习--python】图像的矩Image Moments相关推荐

  1. 【OpenCV入门学习--python】索贝尔算子Sobel operator提取边缘

    例子源于OpenCV官网手册(https://docs.opencv.org/4.x/d2/d2c/tutorial_sobel_derivatives.html) 使用OpenCV函数Sobel() ...

  2. 【OpenCV入门学习--python】Image Segmentation with Distance Transform and Watershed Algorithm图像分割

    例子源于OpenCV官网–基于距离变换和分水岭算法的图像分割 (https://docs.opencv.org/4.x/d2/dbd/tutorial_distance_transform.html) ...

  3. 【OpenCV入门学习--python】Anisotropic image segmentation by a gradient structure tensor

    例子源于OpenCV官网–基于梯度结构张量的各向异性图像分割 (https://docs.opencv.org/4.x/d4/d70/tutorial_anisotropic_image_segmen ...

  4. 【计算机视觉】opencv入门学习笔记Part.1

    [计算机视觉]opencv入门学习笔记Part.1 1 前言 1.1 opencv概述(摘取自百度百科) 1.2 图像概念引入 1.3 安装opencv库 2 图像基本操作 2.1 图像的读取 2.2 ...

  5. 零基础学python pdf-Python pdf(零基础入门学习Python)V1.0 最新版

    Python pdf(零基础入门学习Python)是一款功能强劲专业实用的Python电子书籍.想要零基础入门学习Python?那就快试试绿色先锋小编推荐的Python pdf最新版下载使用.由作者小 ...

  6. 零基础学python 视频_零基础入门学习PYTHON(第2版)(微课视频版)

    小甲鱼畅销图书重磅升级,针对Python 3.7,通过生动的实例,让读者在实践中理解概念,在轻松.愉快中学会Python! 本书提倡理解为主,应用为王.因此,只要有可能,小甲鱼(注:作者)都会通过生动 ...

  7. 零基础入门学习Python,我与python的第一次亲密接触后的感受!

    前言:Python是适合初学者入门最好的语言 Python适合初学者入门最好的语言 人工智能用Python?高考要加入Python?现在连微软官方Excel都要把Python作为官方语言!Python ...

  8. 零基础入门学python 第二版-《零基础入门学习Python》第二版和第一版的区别在哪里呢?...

    第一版 时光荏苒,一晃间,距离<零基础入门学习 Python>出版(2016年11月)已经过去两年多了,在这段时间里, Python 逐步走入了大家的视野,这门语言因其简洁的语法风格,在云 ...

  9. 0基础学python难吗-零基础入门学习Python技术难不难?

    原标题:零基础入门学习Python技术难不难? 近几年对python人才爆发式需求,导致很多人转行进入python开发行业,现如今Python这门语言的就业前景会非常好.相对于其他来说,它语法简单易读 ...

最新文章

  1. 密码篇——非对称加密
  2. 在创建表时,对于auto_now=True与 auto_now_add=True 的区别
  3. 计算机系统 过程调用
  4. jquery 中 fn.apply(this, arguments)是什么函数?有什么作用?能举个例子吗
  5. OpenCV_ cv2.imshow()
  6. 从P1到P7——我在淘宝这7年(一)
  7. 新建模块 pom.xml依赖无法识别_使用模块依赖关系,第2部分
  8. 传智播客 GIL(全局解释器锁)学习
  9. 深度学习画图软件收集
  10. [Linux网络编程]高并发-Epoll模型
  11. 【非标自动化】2017年的最NB的非标自动化内容都在这了
  12. 单例模式详解(线程安全,饿汉,懒汉模式)
  13. 数据库中的主键与外键的关系
  14. linux系统编程界面,App主界面比较 - Android学习系列_Linux编程_Linux公社-Linux系统门户网站...
  15. Flutter —快速开发的IDE快捷方式
  16. 整理最全的图床集合——三千图床
  17. npm安装任何包都报错解决方法
  18. 知识蒸馏 | (1) 知识蒸馏概述
  19. 在非金融应用中在哪里使用区块链?
  20. 这群年轻人禁欲8年,成了日本最好的匠人! (程序员专注可以借鉴)

热门文章

  1. 密度计算机公式,密度计算公式及单位
  2. 东北大学计算机录取分数线2020,985双一流大学 东北大学2020年各省分专业最低录取分数线...
  3. 数据库规范化理论详解
  4. Android开发——如何解决三方库中的类名冲突问题
  5. I2C调试遇到的问题以及解决办法---“busy死锁状态”以及“从设备地址无应答”问题
  6. Nii图像的读取、操作与保存
  7. 如何成功实现“从经理到总监”的跨越?
  8. 五分钟you-get入门
  9. Android_使用Android killer破解apk
  10. 陕西省第九次大学生高等数学竞赛复赛试题