Python Opencv实践 - HoG特征计算

news/2024/7/21 4:11:33 标签: python, opencv, 开发语言, 图像处理, 计算机视觉

参考资料:https://www.cnblogs.com/alexme/p/11361563.html
         https://blog.csdn.net/qq_43348528/article/details/108638030

import cv2 as cv
import numpy as np
import matplotlib.pyplot as plt
from skimage import exposure
from skimage.feature import hog
from skimage import data,color,exposure

img = cv.imread("../SampleImages/tifa.jpg", cv.IMREAD_COLOR)
plt.imshow(img[:,:,::-1])

#转换为灰度图
img_gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
plt.imshow(img_gray, plt.cm.gray)

#HoG特征计算
#参考资料:https://www.cnblogs.com/alexme/p/11361563.html
#         https://blog.csdn.net/qq_43348528/article/details/108638030
#1. 创建HoG对象
#   hog = cv.HOGDescriptor(winSize,blockSize,blockStride,cellSize,nbins)
#   winSize:检测窗口大小
#   blockStride:block块的滑动步长
#   cellSize:cell单元大小
#   nbins:统计梯度的方向数目,一般为9,即一个cell统计9个角度范围的梯度直方图
winSize = (64,128)
blockSize = (16,16)
blockStride = (8,8)
cellSize = (8,8)
nbins = 9
hog_obj = cv.HOGDescriptor(winSize, blockSize, blockStride, cellSize, nbins)
#2. 计算HoG特征
#   hogDes = hog.compute(img,winStride,padding)
#   img:原图
#   winStride:检测窗口的滑动步长
#   padding:填充,在图像周围填充点的边界处理
#   返回hogDes:对整幅图像的HoG特征描述符
hogDes = hog_obj.compute(img_gray, winStride=(8,8))
#使用OPENCV的HOGDescriptor不能将HOG处理后的梯度直方图结合原图显示
print("HogDes Size:",hogDes.size)
print(hogDes)

#使用skimage
fd,hog_image = hog(img_gray, orientations=8, pixels_per_cell=(16,16), cells_per_block=(1,1), visualize=True)
hog_image_rescaled = exposure.rescale_intensity(hog_image, in_range=(0,0.02))
#叠加HoG梯度直方图到图像上
img_hog_display = img_gray * hog_image_rescaled
plt.figure(figsize=(16,16), dpi=80)
plt.imshow(img_hog_display, plt.cm.gray)

 


http://www.niftyadmin.cn/n/5025651.html

相关文章

pycharm安装jupyter,用德古拉主题,但是输入行全白了,看不清,怎么办?

问题描述 今天换了以下pycharm主题,但是jupyter界面输入代码行太白了,白到看不清楚这行的字,更不知道写的是什么,写到哪了,这还是挺烦人的,其他都挺正常的。 问题分析 目前来看有两个原因: 1、…

【mars3d学习】淹没分析,计算最高最低值出错

问题一:淹没分析(地形分析) Mars3d淹没分析的示例 - 功能示例(Vue版) | Mars3D三维可视化平台 | 火星科技 初始化一个polygon面的时候,使用 mars3d.PolyUtil.interPolygonByDepth 直接计算淹没的最大最小高度值; 但…

Java的interface应用和面向接口编程

记录:477 场景:Java的关键字interface应用,一个接口,多个实现类。面向接口编程,把业务逻辑线提取出来作为接口,具体的业务实现通过该接口的实现类来完成。 版本:JDK 1.8。 1.一个Java接口 (…

嵌入式Linux驱动开发(I2C专题)(一)

一、I2C协议 1.1、硬件连接 I2C在硬件上的接法如下所示,主控芯片引出两条线SCL,SDA线,在一条I2C总线上可以接很多I2C设备。 1.2、IIC传输数据的格式 1.2.1、写操作 流程如下: 主芯片要发出一个start信号然后发出一个设备地址(用来确定是…

磁盘、内存和硬盘的区别

一、概念 磁盘:利用磁记录技术存储数据的存储器,它是计算机主要的存储介质,可以存储大量的二进制数据,并且断电后也能保持数据不丢失。早期计算机使用的磁盘是软磁盘(Floppy Disk),简称软盘&…

前端面试要点

0914 JScript深拷贝和浅拷贝(js解构赋值算哪个?) 深拷贝和浅拷贝 回流和重绘 回流和重绘 webpack打包流程 Webpack打包 虚拟DOM 虚拟DOM git合并分支 git合并分支 CSS盒子模型 CSS盒子模型 0911 WebPack分包 webpack分包 ts泛型 ts泛型 优化…

Java多线程篇(2)——mesi与内存屏障与volatile

文章目录 CPU高速缓存高速缓存storeBufferinvalidate message queue JMM 内存屏障volatile CPU高速缓存 高速缓存 每个cpu核心都有自己的高速缓存,结构如下 有缓存必有一致性问题,CPU0和CPU1之间的缓存是如何保持一致的。比较常见的一种做法就是 MESI…

建设数字孪生智慧城市是未来城市的重要增长点

中国国家创新与发展战略研究会学术委员会常务副主席、重庆市原市长黄奇帆在《瞭望》撰文指出: AI时代的城市是由实体空间和数字空间组成的数字孪生城市,要充分重视对数字空间的治理。随着城市数字化进程的加快,城市、企业、个人开始形成多样化…