日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

opencv进阶学习笔记7:直方图,直方图均衡化,直方图比较,直方图反向投影

發(fā)布時間:2024/9/30 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 opencv进阶学习笔记7:直方图,直方图均衡化,直方图比较,直方图反向投影 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

基礎版?zhèn)魉烷T:
python3+opencv學習筆記匯總目錄(適合基礎入門學習)
進階版筆記目錄鏈接:
python+opencv進階版學習筆記目錄(適合有一定基礎)

直方圖基礎講解:
opencv學習筆記21:直方圖和掩膜 原理及其應用

圖像直方圖

numpy實現
函數:hist(數據源,像素級)
數據源:圖像,必須是一維數組
像素級:一般是256,指[0-255]
np.raval()可以實現多維數組轉一維。

import cv2 as cv import numpy as np from matplotlib import pyplot as pltdef plot_demo(image):plt.hist(image.ravel(),256,[0,256])# plt.hist(image.ravel(),256)#兩種寫法都對plt.show() print("--------- Hello Python ---------") src = cv.imread("fangye.jpg") cv.namedWindow("input image", cv.WINDOW_AUTOSIZE) cv.imshow("input image", src)plot_demo(src) cv.waitKey(0) cv.destroyAllWindows()

OpenCV實現

hist=cv2.calcHist(images,channels,mask,histsize,ranges,accumulate)
hist:直方圖
images:原始圖像,格式[src],需要用中括號括起來
channels:通道,灰色直接[0],BGR對應[0],[1],[2]
mask:掩碼圖像。如果一個圖很大,需要計算部分圖的直方圖,需要掩碼。
histsize:BINS的數量,需要用中括號括起來。一般是[256]
ranges:像素值范圍,一般[0,255]
accumulate:累積標識。可選參數、默認false,設為true為計算好幾幅圖的直方圖。

import cv2 as cv import numpy as np from matplotlib import pyplot as pltdef image_hist(image):color = ('blue', 'green', 'red')for i, color in enumerate(color):hist = cv.calcHist([image], [i], None, [256], [0, 256])plt.plot(hist, color=color)plt.xlim([0, 256])plt.show() print("--------- Hello Python ---------") src = cv.imread("renwu.jpg") cv.namedWindow("input image", cv.WINDOW_AUTOSIZE) cv.imshow("input image", src)image_hist(src) cv.waitKey(0) cv.destroyAllWindows()

圖像來源于網圖。
圖像的主要特征來源于波峰。

圖像直方圖應用

1全局直方圖均衡化
直方圖均衡化都是基于灰色圖
原理見上面提到的基礎鏈接
效果:使對比圖增強

import cv2 as cv import numpy as np from matplotlib import pyplot as pltdef equalHist_demo(image):gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY)dst = cv.equalizeHist(gray)cv.imshow("equalHist_demo", dst) print("--------- Hello Python ---------") src = cv.imread("renwu.jpg") src=cv.resize(src,None,fx=0.5,fy=0.5) cv.namedWindow("input image", cv.WINDOW_AUTOSIZE) cv.imshow("input image", src)equalHist_demo(src) cv.waitKey(0) cv.destroyAllWindows()

2局部直方圖均衡化
局部自適應的圖像直方圖均衡化
自適應直方圖均衡化(AHE)是用來提升圖像的對比度的一種計算機圖像處理技術。和普通的直方圖均衡算法不同,AHE算法通過計算圖像的局部直方圖,然后重新分布亮度來改變圖像對比度。因此,該算法更適合于改進圖像的局部對比度以及獲得更多的圖像細節(jié)。

不過,AHE有過度放大圖像中相同區(qū)域的噪音的問題,另外一種自適應的直方圖均衡算法即限制對比度直方圖均衡(CLAHE)算法能有限的限制這種不利的放大。

cv2.createCLAHE(clipLimit=5.0, tileGridSize=(8, 8))
第一個參數的意義是那一小部分的直方圖大于clipLimit的部分將被剪裁掉平均分配 給整個圖像;第二個參數的意義是 所分小區(qū)域的大小。一般的clipLimit設置的值是40,自定義的話值越大均化的效果越顯著,值越接近零,就和原圖像沒什么區(qū)別,
原理圖:

import cv2 as cv import numpy as np from matplotlib import pyplot as pltdef clahe_demo(image):gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY)clahe = cv.createCLAHE(clipLimit=3.0, tileGridSize=(5, 5))dst = clahe.apply(gray)cv.imshow("clahe_demo", dst) print("--------- Hello Python ---------") src = cv.imread("renwu1.jpg") src=cv.resize(src,None,fx=0.6,fy=0.6) cv.namedWindow("input image", cv.WINDOW_AUTOSIZE) cv.imshow("input image", src)clahe_demo(src) cv.waitKey(0) cv.destroyAllWindows()

直方圖比較

對輸入的兩張圖像計算得到直方圖H1與H2,歸一化到相同的尺度空間,然后可以通過計算H1與H2的之間的距離得到兩個直方圖的相似程度進而比較圖像本身的相似程度。
直方圖比較函數

cv2.compareHist(H1, H2, method)
其中:

H1,H2 分別為要比較圖像的直方圖
method - 比較方式
比較方式(method)

相關性比較 (method=cv.HISTCMP_CORREL) 值越大,相關度越高,最大值 為1,最小值為0
卡方比較(method=cv.HISTCMP_CHISQR 值越小,相關度越高,最大值無上界,最小值0
巴氏距離比較(method=cv.HISTCMP_BHATTACHARYYA) 值越小,相關度越高,最大值為1,最小值為0

import cv2 as cv import numpy as np#rgb直方圖 def create_rgb_hist(image):h, w, c = image.shapergbHist = np.zeros([16*16*16, 1], np.float32)#直方圖初始化bsize = 256 / 16for row in range(h):for col in range(w):b = image[row, col, 0]g = image[row, col, 1]r = image[row, col, 2]index = np.int(b/bsize)*16*16 + np.int(g/bsize)*16 + np.int(r/bsize)rgbHist[np.int(index), 0] = rgbHist[np.int(index), 0] + 1#出現了就加1return rgbHist#比較函數 def hist_compare(image1, image2):hist1 = create_rgb_hist(image1)hist2 = create_rgb_hist(image2)match1 = cv.compareHist(hist1, hist2, cv.HISTCMP_BHATTACHARYYA)#比較方法1,越小越相似match2 = cv.compareHist(hist1, hist2, cv.HISTCMP_CORREL)#相關性越大越相似match3 = cv.compareHist(hist1, hist2, cv.HISTCMP_CHISQR)#卡方越大約不相似print("巴氏距離: %s, 相關性: %s, 卡方: %s"%(match1, match2, match3))print("--------- Hello Python ---------") src1 = cv.imread("renwu1.jpg") src2 = cv.imread("renwu.jpg") src1=cv.resize(src1,None,fx=0.5,fy=0.5) src2=cv.resize(src2,None,fx=0.5,fy=0.5) cv.namedWindow("input image", cv.WINDOW_AUTOSIZE) cv.imshow("input image", src1) cv.imshow("image2", src2) hist_compare(src1, src2) cv.waitKey(0) cv.destroyAllWindows()

輸入兩張完全一樣圖片
結果

直方圖反向投影

直方圖反向投影式通過給定的直方圖信息,在圖像找到相應的像素分布區(qū)域,opencv提供兩種算法,一個是基于像素的,一個是基于塊的。

2D直方圖建立
直方圖是基于2D的,首先先計算2D直方圖建立。

使用函數 cv2.calcHist() 來計算直方圖既簡單又方便。如果要繪制顏色直方圖的話,首先需要將圖像的顏色空間從 BGR 轉換到 HSV。(記住,計算二維直方圖,要從 BGR 轉換到 HSV)。計算 2D 直方圖,函數的參數要做如下修改:
? channels=[0, 1] 因為我們需要同時處理 H 和 S 兩個通道。
? bins=[180, 256]H 通道為 180, S 通道為 256。 如果寫其他數值(小于180,256)則表示是通道合并。
? range=[0, 180, 0, 256]H 的取值范圍在 0 到 180, S 的取值范圍在 0 到 256。
hist = cv2.calcHist([image], [0, 1], None, [32, 32], [0, 180, 0, 256])

import cv2 as cv import numpy as np from matplotlib import pyplot as pltdef hist2d_demo(image):hsv = cv.cvtColor(image, cv.COLOR_BGR2HSV)hist = cv.calcHist([image], [0, 1], None, [180, 256], [0, 180, 0, 256])#cv.imshow("hist2d", hist)plt.imshow(hist, interpolation='nearest')#nearest鄰近點插值plt.title("2D Histogram")plt.show() print("--------- Hello Python ---------") src = cv.imread("yangmi.jpg") src=cv.resize(src,None,fx=0.5,fy=0.5) #hist2d_demo(src) cv.namedWindow("input image", cv.WINDOW_AUTOSIZE) cv.imshow("input image", src) hist2d_demo(src) cv.waitKey(0) cv.destroyAllWindows()

直方圖反向投影
此段代碼有借鑒他人

import cv2 as cv import numpy as np from matplotlib import pyplot as pltdef back_projection_demo():# ROI區(qū)域roi= cv.imread("head.png")#roi=cv.resize(roi,None,fx=0.5,fy=0.5)#目標搜索區(qū)域target = cv.imread("renwu.jpg")target= cv.resize(target, None, fx=0.2, fy=0.2)roi_hsv = cv.cvtColor(roi, cv.COLOR_BGR2HSV)target_hsv = cv.cvtColor(target, cv.COLOR_BGR2HSV)# show imagescv.imshow("roi", roi)#cv.imshow("target", target)roiHist = cv.calcHist([roi_hsv], [0, 1], None, [180,256], [0, 180, 0, 256])#2D直方圖cv.normalize(roiHist, roiHist, 0, 255, cv.NORM_MINMAX)#歸一化到0-255dst = cv.calcBackProject([target_hsv], [0, 1], roiHist, [0, 180, 0, 256], 1)#cv.imshow("backProjectionDemo", dst)# 此處卷積可以把分散的點連在一起disc = cv.getStructuringElement(cv.MORPH_ELLIPSE, (5, 5))dst = cv.filter2D(dst, -1, disc)# threshold and binary ANDret, thresh = cv.threshold(dst, 200, 255, 0)# 別忘了是三通道圖像,因此這里使用 merge 變成 3 通道thresh = cv.merge((thresh, thresh, thresh))# 按位操作res = cv.bitwise_and(target, thresh)res = np.hstack((target, thresh, res))cv.imshow('res',res)#cv.imwrite('res.jpg', res)back_projection_demo() cv.waitKey(0)cv.destroyAllWindows()

原始模板ROI

即從目標圖尋找和模板相似的區(qū)域(直方圖相似)
結果:

要修改 ret, thresh = cv.threshold(dst, 200, 255, 0) 數值才能得到更好。

電氣專業(yè)的計算機萌新,寫博文不容易。如果你覺得本文對你有用,請點個贊再走。謝謝。

總結

以上是生活随笔為你收集整理的opencv进阶学习笔记7:直方图,直方图均衡化,直方图比较,直方图反向投影的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产精久久久 | 成年人毛片视频 | 成人精品福利视频 | 男人插女人网站 | 综合网亚洲 | 刘亦菲毛片 | 日本精品在线观看视频 | 亚洲影库| 青青草国产一区 | 最好看的2019年中文在线观看 | 亚洲乱强伦 | 人禽l交视频在线播放 视频 | jizz一区 | 中文久草 | 污污内射久久一区二区欧美日韩 | 麻豆videos| 欧美日韩国产不卡 | 欧美一区国产一区 | 超碰中文字幕在线 | 日韩不卡一二三 | 牛牛免费视频 | 黄黄视频在线观看 | 国产精品白嫩极品美女 | 中文字幕乱伦视频 | 亚洲麻豆 | 超碰伊人久久 | 综合狠狠| 伊人成年网 | 一区二区国产在线观看 | 天堂8中文在线 | 亚洲免费精品视频在线观看 | 一级特黄bbbbb免费观看 | 色婷婷综合久久久久中文字幕 | 18视频网站在线观看 | 中国黄色a级 | 国产精品成人国产乱一区 | 91亚洲国产成人精品性色 | 日本 奴役 捆绑 受虐狂xxxx | 国产精品成人aaaaa网站 | 四虎永久网站 | 尹人综合在线 | 第一av在线 | 色小说在线观看 | 久久黄视频 | 正在播放木下凛凛xv99 | 国产精品久久久久久亚洲伦 | 在线免费国产视频 | 在线视频观看你懂得 | 少妇69xx | 国产成人精品一区二区三区无码熬 | 亚洲黄色a级片 | 国产一区二区三区四区在线观看 | 国产一区二区网 | 69**夜色精品国产69乱 | 免费成人av在线播放 | 天天操夜夜草 | 好看的毛片| 二区三区av | 日本男男激情gay办公室 | 成人日批| 老司机午夜性大片 | 想要视频在线观看 | 误杀1电影免费观看高清完整版 | 91呦呦| 在线国产三级 | 激情小说亚洲图片 | 国产黄色美女视频 | 国产视频999 | 日本囗交做爰视频 | 国产精品毛片久久久久久久av | 丰满女人又爽又紧又丰满 | 怡红院精品视频 | 99热这里只有精品9 日韩综合在线 | 色91精品久久久久久久久 | 久草福利网 | 东京热一区二区三区四区 | 性少妇xxxxx| 欧美手机在线视频 | 久久精品国产亚洲a | 首尔之春在线观看 | 婷婷激情四射 | 调教丰满的已婚少妇在线观看 | 偷拍一区二区三区四区 | 欧美日韩视频在线观看免费 | 一区二区三区免费在线视频 | 婷婷久| 女人天堂av | 欧美另类在线播放 | 日韩欧美高清在线观看 | 中文字幕日韩有码 | 久色婷婷 | 超碰美女 | av男人网| 亚洲精品日韩丝袜精品 | 精品成人免费一区二区在线播放 | 涩涩涩在线观看 | av老司机福利 | 欧美一区二区区 | 午夜精品视频在线 |