日B视频 亚洲,啪啪啪网站一区二区,91色情精品久久,日日噜狠狠色综合久,超碰人妻少妇97在线,999青青视频,亚洲一区二卡,让本一区二区视频,日韩网站推荐

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

OpenCV中積分圖函數(shù)與應(yīng)用

OpenCV學(xué)堂 ? 來源:OpenCV學(xué)堂 ? 作者:OpenCV學(xué)堂 ? 2022-06-29 10:26 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

OpenCV中積分圖函數(shù)與應(yīng)用

一:圖像積分圖概念

積分圖像是Crow在1984年首次提出,是為了在多尺度透視投影中提高渲染速度。隨后這種技術(shù)被應(yīng)用到基于NCC的快速匹配、對象檢測和SURF變換中、基于統(tǒng)計學(xué)的快速濾波器等方面。積分圖像是一種在圖像中快速計算矩形區(qū)域和的方法,這種算法主要優(yōu)點是一旦積分圖像首先被計算出來我們可以計算圖像中任意大小矩形區(qū)域的和而且是在常量時間內(nèi)。這樣在圖像模糊、邊緣提取、對象檢測的時候極大降低計算量、提高計算速度。第一個應(yīng)用積分圖像技術(shù)的應(yīng)用是在Viola-Jones的對象檢測框架中出現(xiàn)。

35f9e682-f6f5-11ec-ba43-dac502259ad0.jpg

36181fe4-f6f5-11ec-ba43-dac502259ad0.png

上圖左側(cè)四個點的矩形區(qū)域像素求和,只要根據(jù)每個點左上方所有像素和表值,進(jìn)行兩次減法與一次加法即可=》46 – 22 – 20 + 10 = 14

二:OpenCV中積分圖函數(shù)

OpenCV中通過integral()函數(shù)可以很容易的計算圖像的積分圖,該函數(shù)支持和表積分圖、平方和表積分圖、瓦塊和表積分圖計算。integral函數(shù)與參數(shù)解釋如下:


	
  1. void cv::integral(

  2. InputArray src, // 輸入圖像

  3. OutputArray sum, // 和表

  4. OutputArray sqsum, // 平方和表

  5. OutputArray tilted, // 瓦塊和表

  6. int sdepth = -1, // 和表數(shù)據(jù)深度常見CV_32S

  7. int sqdepth = -1 // 平方和表數(shù)據(jù)深度 常見 CV_32F

  8. )

三:使用積分圖函數(shù)

通過代碼演示計算積分圖實現(xiàn)任意窗口大小的盒子模糊與垂直邊緣提取,完整的代碼實現(xiàn)如下:


	
  1. #include

  2. #include

  3. using namespace cv;

  4. using namespace std;

  5. void blur_demo(Mat &image, Mat &sum);

  6. void edge_demo(Mat &image, Mat &sum);

  7. int getblockSum(Mat &sum, int x1, int y1, int x2, int y2, int i);

  8. int main(int argc, char** argv) {

  9. Mat src = imread("D:/vcprojects/images/yuan_test.png");

  10. if (src.empty()) {

  11. printf("could not load image... ");

  12. return -1;

  13. }

  14. namedWindow("input", CV_WINDOW_AUTOSIZE);

  15. imshow("input", src);

  16. namedWindow("output", CV_WINDOW_AUTOSIZE);

  17. // 計算積分圖

  18. Mat sum, sqrsum;

  19. integral(src, sum, sqrsum, CV_32S, CV_32F);

  20. // 積分圖應(yīng)用

  21. int type = 0;

  22. while (true) {

  23. char c = waitKey(100);

  24. if (c > 0) {

  25. type = (int)c;

  26. printf("c : %d ", type);

  27. }

  28. if (c == 27) {

  29. break; // ESC

  30. }

  31. if (type == 49) { // 數(shù)字鍵 1

  32. blur_demo(src, sum);

  33. }

  34. else if (type == 50) { // 數(shù)字鍵 2

  35. edge_demo(src, sum);

  36. }

  37. else {

  38. blur_demo(src, sum);

  39. }

  40. }

  41. waitKey(0);

  42. return 0;

  43. }

  44. void blur_demo(Mat &image, Mat &sum) {

  45. int w = image.cols;

  46. int h = image.rows;

  47. Mat result = Mat::zeros(image.size(), image.type());

  48. int x2 = 0, y2 = 0;

  49. int x1 = 0, y1 = 0;

  50. int ksize = 5;

  51. int radius = ksize / 2;

  52. int ch = image.channels();

  53. int cx = 0, cy = 0;

  54. for (int row = 0; row < h + radius; row++) {

  55. y2 = (row + 1)>h ? h : (row + 1);

  56. y1 = (row - ksize) < 0 ? 0 : (row - ksize);

  57. for (int col = 0; col < w + radius; col++) {

  58. x2 = (col + 1)>w ? w : (col + 1);

  59. x1 = (col - ksize) < 0 ? 0 : (col - ksize);

  60. cx = (col - radius) < 0 ? 0 : col - radius;

  61. cy = (row - radius) < 0 ? 0 : row - radius;

  62. int num = (x2 - x1)*(y2 - y1);

  63. for (int i = 0; i < ch; i++) {

  64. // 積分圖查找和表,計算卷積

  65. int s = getblockSum(sum, x1, y1, x2, y2, i);

  66. result.at<Vec3b>(cy, cx)[i] = saturate_cast(s / num);

  67. }

  68. }

  69. }

  70. imshow("output", result);

  71. imwrite("D:/result.png", result);

  72. }

  73. /**

  74. * 3x3 sobel 垂直邊緣檢測演示

  75. */

  76. void edge_demo(Mat &image, Mat &sum) {

  77. int w = image.cols;

  78. int h = image.rows;

  79. Mat result = Mat::zeros(image.size(), CV_32SC3);

  80. int x2 = 0, y2 = 0;

  81. int x1 = 0, y1 = 0;

  82. int ksize = 3; // 算子大小,可以修改,越大邊緣效應(yīng)越明顯

  83. int radius = ksize / 2;

  84. int ch = image.channels();

  85. int cx = 0, cy = 0;

  86. for (int row = 0; row < h + radius; row++) {

  87. y2 = (row + 1)>h ? h : (row + 1);

  88. y1 = (row - ksize) < 0 ? 0 : (row - ksize);

  89. for (int col = 0; col < w + radius; col++) {

  90. x2 = (col + 1)>w ? w : (col + 1);

  91. x1 = (col - ksize) < 0 ? 0 : (col - ksize);

  92. cx = (col - radius) < 0 ? 0 : col - radius;

  93. cy = (row - radius) < 0 ? 0 : row - radius;

  94. int num = (x2 - x1)*(y2 - y1);

  95. for (int i = 0; i < ch; i++) {

  96. // 積分圖查找和表,計算卷積

  97. int s1 = getblockSum(sum, x1, y1, cx, y2, i);

  98. int s2 = getblockSum(sum, cx, y1, x2, y2, i);

  99. result.at<Vec3i>(cy, cx)[i] = saturate_cast(s2 - s1);

  100. }

  101. }

  102. }

  103. Mat dst, gray;

  104. convertScaleAbs(result, dst);

  105. normalize(dst, dst, 0, 255, NORM_MINMAX);

  106. cvtColor(dst, gray, COLOR_BGR2GRAY);

  107. imshow("output", gray);

  108. imwrite("D:/edge_result.png", gray);

  109. }

  110. int getblockSum(Mat &sum, int x1, int y1, int x2, int y2, int i) {

  111. int tl = sum.at<Vec3i>(y1, x1)[i];

  112. int tr = sum.at<Vec3i>(y2, x1)[i];

  113. int bl = sum.at<Vec3i>(y1, x2)[i];

  114. int br = sum.at<Vec3i>(y2, x2)[i];

  115. int s = (br - bl - tr + tl);

  116. return s;

  117. }

這里最重要的是要注意到上面的圖示,積分圖對象的Mat(1,1)對應(yīng)實際圖像Mat(0,0),如果不加處理的話會導(dǎo)致結(jié)果有明顯的中心遷移。edge_demo實現(xiàn)了積分圖查找提取圖像邊緣、blur_demo函數(shù)實現(xiàn)積分圖查找圖像均值模糊,getblockSum函數(shù)實現(xiàn)和表查找功能,運行顯示:

原圖:

模糊效果

36546d64-f6f5-11ec-ba43-dac502259ad0.jpg

邊緣效果

36721c38-f6f5-11ec-ba43-dac502259ad0.jpg

審核編輯 :李倩


聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 圖像
    +關(guān)注

    關(guān)注

    2

    文章

    1096

    瀏覽量

    42449
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4423

    瀏覽量

    67880
  • OpenCV
    +關(guān)注

    關(guān)注

    33

    文章

    652

    瀏覽量

    45110

原文標(biāo)題:OpenCV中積分圖介紹與應(yīng)用

文章出處:【微信號:CVSCHOOL,微信公眾號:OpenCV學(xué)堂】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    深入理解積分型ADC

    具備良好的噪聲抑制能力,常用于數(shù)字萬用表、面板儀表等應(yīng)用。接下來,我們就詳細(xì)探討這種轉(zhuǎn)換器的工作原理及其特性。 文件下載: ICL7126IPL+.pdf 二、積分型ADC概述 積分型ADC可以提供高分辨率的轉(zhuǎn)換結(jié)果,并且對電
    的頭像 發(fā)表于 04-02 09:15 ?736次閱讀

    OpenCV首次到訪奧比光并展開深度交流

    1月15日,OpenCV創(chuàng)始人及核心團(tuán)隊首次到訪奧比光,雙方圍繞3D視覺硬件與計算機視覺軟件的協(xié)同創(chuàng)新,展開深度交流。
    的頭像 發(fā)表于 01-21 15:51 ?582次閱讀

    沒有專利的opencv-python 版本

    所有 官方發(fā)布的 opencv-python 核心版本(無 contrib 擴(kuò)展)都無專利風(fēng)險——專利問題僅存在于 opencv-contrib-python 擴(kuò)展模塊的少數(shù)算法(如早期 SIFT
    發(fā)表于 12-13 12:37

    橫河WT1800R功率分析儀積分測量設(shè)置步驟

    在光伏逆變器能效檢測、家電待機功耗測試等場景,功率積分測量精度至關(guān)重要。橫河WT1800R憑借“無死區(qū)積分”和“智能量程切換”優(yōu)勢成為首選,但實操易出現(xiàn)數(shù)據(jù)波動等問題。
    的頭像 發(fā)表于 12-08 16:22 ?1001次閱讀
    橫河WT1800R功率分析儀<b class='flag-5'>積分</b>測量設(shè)置步驟

    機器視覺雙雄YOLO 和 OpenCV 到底有啥區(qū)別?別再傻傻分不清!

    如何在深圳市鋇錸技術(shù)有限公司的AI邊緣計算產(chǎn)品結(jié)合,實現(xiàn)真正的“視覺智能”。 一、前言:為什么總有人把YOLO和OpenCV搞混? 在AI視覺項目中,你可能聽過這樣的討論:“要做人臉檢測,我用OpenCV?!薄安粚Γ肶OLO
    的頭像 發(fā)表于 10-14 16:00 ?1770次閱讀
    機器視覺雙雄YOLO 和 <b class='flag-5'>OpenCV</b> 到底有啥區(qū)別?別再傻傻分不清!

    零成本鋼鐵俠手套!樹莓派+OpenCV 秒變手勢遙控器!

    大家好,這是一個樹莓派和OpenCV的連載專題。使用樹莓派與OpenCV實現(xiàn)姿態(tài)估計和面部特征點追蹤使用樹莓派與OpenCV實現(xiàn)面部和運動追蹤的云臺系統(tǒng)使用樹莓派和OpenCV實現(xiàn)手部
    的頭像 發(fā)表于 08-16 16:16 ?1610次閱讀
    零成本鋼鐵俠手套!樹莓派+<b class='flag-5'>OpenCV</b> 秒變手勢遙控器!

    如何使用樹莓派與OpenCV實現(xiàn)面部和運動追蹤的云臺系統(tǒng)?

    大家好,這是一個樹莓派和OpenCV的連載專題。使用樹莓派與OpenCV實現(xiàn)姿態(tài)估計和面部特征點追蹤使用樹莓派與OpenCV實現(xiàn)面部和運動追蹤的云臺系統(tǒng)使用樹莓派和OpenCV實現(xiàn)手部
    的頭像 發(fā)表于 08-14 17:45 ?2531次閱讀
    如何使用樹莓派與<b class='flag-5'>OpenCV</b>實現(xiàn)面部和運動追蹤的云臺系統(tǒng)?

    如何使用樹莓派+OpenCV實現(xiàn)姿態(tài)估計和面部特征點追蹤?

    大家好,這是一個樹莓派和OpenCV的連載專題。使用樹莓派與OpenCV實現(xiàn)姿態(tài)估計和面部特征點追蹤使用樹莓派與OpenCV實現(xiàn)面部和運動追蹤的云臺系統(tǒng)使用樹莓派和OpenCV實現(xiàn)手部
    的頭像 發(fā)表于 08-13 17:44 ?1496次閱讀
    如何使用樹莓派+<b class='flag-5'>OpenCV</b>實現(xiàn)姿態(tài)估計和面部特征點追蹤?

    如何板端編譯OpenCV并搭建應(yīng)用--基于瑞芯微米爾RK3576開發(fā)板

    .. make-j8 可以首先測試下opencv環(huán)境是否正常 輸入 ./example_opencv即可打開如上命令,證明系統(tǒng)的cv環(huán)境沒有問題 性能測試 在hog測試dnn加速平均幀率10fps左右 8cpu已經(jīng)接近
    發(fā)表于 08-08 17:14

    ElfBoard技術(shù)貼|如何在【RK3588】ELF 2開發(fā)板安裝openCV4以及第三方庫contrib

    應(yīng)用,不同項目對功能、性能等方面常有特定需求,開發(fā)者可能需要使用其他版本的OpenCV,此時便需替換Buildroot的默認(rèn)配置。同時,為滿足更復(fù)雜場景需求并擴(kuò)展功能,添加OpenCV的contrib
    的頭像 發(fā)表于 08-05 11:03 ?4741次閱讀
    ElfBoard技術(shù)貼|如何在【RK3588】ELF 2開發(fā)板<b class='flag-5'>中</b>安裝<b class='flag-5'>openCV</b>4以及第三方庫contrib

    【Milk-V Duo S 開發(fā)板免費體驗】SDK編譯、人臉檢測、OpenCV測試

    【Milk-V Duo S 開發(fā)板免費體驗】SDK編譯、人臉檢測、OpenCV測試 本文介紹了 Milk-V Duo S 開發(fā)板實現(xiàn) Buildroot SDK 鏡像編譯、基于 TDL 模型的人
    發(fā)表于 07-11 13:48

    編譯opencv_camera_test找不到opencv.hpp怎么解決?

    1.取消makefile的注釋 2.在k230_sdk目錄下進(jìn)入docker環(huán)境后使用make mpp-apps編譯 期待結(jié)果和實際結(jié)果 期待得到opencv_camera_test.elf文件
    發(fā)表于 06-23 06:14

    如何在k230上運行OpenCV的代碼?

    如何在k230上運行OpenCV的代碼
    發(fā)表于 06-17 06:06

    itop-3568開發(fā)板機器視覺opencv開發(fā)手冊-圖像繪制-畫線

    demo11_line.py 然后向該文件添加以下內(nèi)容: 第 1 行和第 2 行分別導(dǎo)入了 opencv 和 numpy 庫; 第 3 行使用 zeros()函數(shù)創(chuàng)建一個 512x512 的黑色圖片; 第 4 行使
    發(fā)表于 06-04 10:38

    在matlab如何計算含有第一類修正的貝塞爾函數(shù)積分算不出的問題?

    問題摘要: 在matlab中計算含有第一類修正的貝塞爾函數(shù)積分時,出現(xiàn)了在部分值能計算出結(jié)果,部分值無法計算出結(jié)果的問題。 一、變量定義: syms x y=1.0+1i*x; %積分
    發(fā)表于 05-19 16:53
    南阳市| 林芝县| 长子县| 汕尾市| 商城县| 沿河| 青海省| 宁远县| 砚山县| 根河市| 桑日县| 临夏市| 海宁市| 嘉荫县| 新野县| 临洮县| 平遥县| 女性| 连南| 海伦市| 英山县| 武穴市| 华坪县| 仙桃市| 海口市| 东源县| 资源县| 建瓯市| 丰顺县| 永春县| 盘锦市| 南江县| 冷水江市| 南部县| 竹溪县| 建德市| 贺兰县| 米泉市| 临西县| 涪陵区| 商水县|