自学opencv日记,day6
形态学操作应用-提取水平与垂直线原理方法图像形态学操作时候可以通过自定义的结构元素实现结构元素对输入图像一些对象敏感、另外一些对象不敏感这样就会让敏感的对象改变而不敏感的对象保留输出。通过使用两个最基本的形态学操作 –膨胀与腐蚀使用不同的结构元素实现对输入图像的操作、得到想要的结果。膨胀输出的像素值是结构元素覆盖下输入图像的最大像素值腐蚀输出的像素值是结构元素覆盖下输入图像的最小像素值代码#include opencv2/opencv.hpp #include iostream using namespace cv; int main(int argc, char** argv) { Mat src imread(C:/Users/Administrator/Pictures/hello.png); if (src.empty()) { printf(不能加载图像); return -1; } namedWindow(创建成功, CV_WINDOW_AUTOSIZE); imshow(创建成功, src); Mat gray; cvtColor(src, gray, CV_BGR2GRAY); namedWindow(gray image, 1); imshow(gray image, gray); Mat binImg; adaptiveThreshold(~gray, binImg, 255, ADAPTIVE_THRESH_MEAN_C, THRESH_BINARY, 15, -2); imshow(binary image, binImg); waitKey(0); return 0; }图1-1 原图像灰度图像与二值图像其中代码参数Mat hline getStructuringElement(MORPH_RECT, Size(src.cols / 16, 1), Point(-1, -1));//水平结构元素 Mat vline getStructuringElement(MORPH_RECT, Size(1, src.rows / 16), Point(-1, -1));//竖直结构元素 Mat dst; Mat temp; erode(binImg, temp, hline); dilate(temp, dst, hline); bitwise_not(dst, dst); imshow(Final Result, dst);开操作后提取水平线图1-2 提取水平线开操作后提取竖直线:图1-3 提取竖直线开操作也可以用这一句morphologyEx(binImg, dst, CV_MOP_OPEN, vline);bitwise_not(dst, dst);这一句是颜色反转。应用提取验证码图1-4 效果图注意图片名称最好不要是中文。图像金字塔上采样和降采样#include opencv2/opencv.hpp #include iostream using namespace cv; int main(int argc, char** argv) { Mat src imread(C:/Users/Administrator/Pictures/20160711084909.jpg); if (src.empty()) { printf(不能加载图像); return -1; } namedWindow(input image, CV_WINDOW_AUTOSIZE); imshow(input image, src); Mat dst, dstdown; pyrUp(src, dst, Size(src.cols * 2, src.rows * 2)); imshow(output image, dst); pyrDown(src, dstdown, Size(src.cols / 2, src.rows / 2)); imshow(output2 image, dstdown); waitKey(0); return 0; }图1-5 上采样和降采样高斯不同DOGDifference Of GaussianMat gray, g1, g2, dogImg; cvtColor(src, gray, CV_BGR2GRAY); GaussianBlur(gray, g1, Size(3, 3), 0, 0); GaussianBlur(g1, g2, Size(3, 3), 0, 0); subtract(g1, g2, dogImg, Mat()); imshow(dogImg, dogImg); waitKey(0); return 0; }此时可以看到一点微弱的轮廓是因为图像变化后不明显。图1-6 不明显的高斯不同图此时加入normalize(dogImg, dogImg, 255, 0, NORM_MINMAX);将图像在0-255的地方归一化如图所示图1-7 归一化后的高斯不同图完整代码如下#include opencv2/opencv.hpp #include iostream using namespace cv; int main(int argc, char** argv) { Mat src imread(C:/Users/Administrator/Pictures/20160711084909.jpg); if (src.empty()) { printf(不能加载图像); return -1; } namedWindow(input image, CV_WINDOW_AUTOSIZE); imshow(input image, src); Mat dst, dstdown; //上采样 pyrUp(src, dst, Size(src.cols * 2, src.rows * 2)); imshow(output image, dst); //降采用 pyrDown(src, dstdown, Size(src.cols / 2, src.rows / 2)); imshow(output2 image, dstdown); //DOG Mat gray, g1, g2, dogImg; cvtColor(src, gray, CV_BGR2GRAY); GaussianBlur(gray, g1, Size(5, 5), 0, 0); GaussianBlur(g1, g2, Size(5, 5), 0, 0); subtract(g1, g2, dogImg, Mat()); //归一化显示 normalize(dogImg, dogImg, 255, 0, NORM_MINMAX); imshow(dogImg, dogImg); waitKey(0); return 0; }基本阈值操作分割类型超过阈值的就和阈值取相等。小于阈值的取0.大于阈值取0.寻找阈值的方法二值化阈值代码#include opencv2/opencv.hpp #include iostream using namespace cv; int threshold_value 127; int threshold_max 255; Mat src, dst; const char* output_title binary image; void Threshold_Demo(int, void*); int main(int argc, char** argv) { src imread(C:/Users/Administrator/Pictures/20160711084909.jpg); if (src.empty()) { printf(不能加载图像); return -1; } namedWindow(input image, CV_WINDOW_AUTOSIZE); namedWindow(output_title, CV_WINDOW_AUTOSIZE); imshow(input image, src); createTrackbar(Threshold Value, output_title, threshold_value, threshold_max, Threshold_Demo); Threshold_Demo(0, 0); waitKey(0); return 0; } void Threshold_Demo(int, void*) { Mat gray; cvtColor(src, gray, CV_BGR2GRAY); threshold(gray, dst, threshold_value, threshold_max, THRESH_BINARY);//二值化阈值 imshow(output_title, dst); }图1-8 二值化阈值注意如果需要生成动态调节结构元素的控制条必须要先创建namedwindow这个窗口如果直接imshow是不会生成控制条的。反向二值化阈值threshold(gray, dst, threshold_value, threshold_max, THRESH_BINARY_INV);图1-9 反向二值化阈值这五种操作可以新建一个trackbar统一起来用type_value来代表五种不同的操作。效果如下图1-10 五种操作集合代码#include opencv2/opencv.hpp #include iostream using namespace cv; int threshold_value 127; int threshold_max 255; int type_value 2; int type_max 4; Mat src, dst; const char* output_title binary image; void Threshold_Demo(int, void*); int main(int argc, char** argv) { src imread(C:/Users/Administrator/Pictures/20160711084909.jpg); if (src.empty()) { printf(不能加载图像); return -1; } namedWindow(input image, CV_WINDOW_AUTOSIZE); namedWindow(output_title, CV_WINDOW_AUTOSIZE); imshow(input image, src); createTrackbar(Threshold Value, output_title, threshold_value, threshold_max, Threshold_Demo); createTrackbar(Type Value, output_title, type_value, type_max, Threshold_Demo);//这个trackbar可以改变type_value的值 Threshold_Demo(0, 0); waitKey(0); return 0; } void Threshold_Demo(int, void*) { Mat gray; cvtColor(src, gray, CV_BGR2GRAY); //threshold(gray, dst, threshold_value, threshold_max, THRESH_BINARY);//二值化阈值 //threshold(gray, dst, threshold_value, threshold_max, THRESH_BINARY_INV);//反向二值化阈值 threshold(gray, dst, threshold_value, threshold_max, type_value); imshow(output_title, dst); }threshold(gray, dst, 0, 255,THRESH_OTSU | type_value);//自动计算阈值或者threshold(gray, dst, 0, 255, THRESH_TRIANGLE | type_value);//自动计算阈值直方这个操作可以自动计算阈值将原代码中 threshold(gray, dst, threshold_value, threshold_max, type_value);替换即可。PS:灰度图像才能进行阈值操作。

相关新闻

戴尔G15散热控制终极指南:免费开源工具告别AWCC卡顿烦恼

戴尔G15散热控制终极指南:免费开源工具告别AWCC卡顿烦恼

戴尔G15散热控制终极指南:免费开源工具告别AWCC卡顿烦恼 【免费下载链接】tcc-g15 Thermal Control Center for Dell G15 - open source alternative to AWCC 项目地址: https://gitcode.com/gh_mirrors/tc/tcc-g15 还在为戴尔G15笔记本的散热问题烦恼吗&…

2026/7/28 18:43:16 阅读更多 →
LeetCode——110,判断平衡二叉树

LeetCode——110,判断平衡二叉树

/*** \* Created: liuhuichao* \* Date: 2019/8/29* \* Time: 30:09 PM* \* Description: 判断平衡二叉树* \* 给定一个二叉树,判断它是否是高度平衡的二叉树。* <p>* 本题中,一棵高度平衡二叉树定义为:* <p>* 一个二叉树每个节点 的左右两个子树的高度差的绝对…

2026/7/28 18:43:16 阅读更多 →
MyBatis流式查询实战:解决海量数据查询内存溢出问题

MyBatis流式查询实战:解决海量数据查询内存溢出问题

这次我们来看一个 Java 开发中非常实际的问题&#xff1a;如何用 MyBatis 的流式查询&#xff0c;解决一次性加载海量数据导致的内存溢出&#xff08;OOM&#xff09;。很多开发者都遇到过&#xff0c;一个看似简单的SELECT * FROM large_table&#xff0c;在数据量达到百万级时…

2026/7/28 18:43:16 阅读更多 →

最新新闻

什么是集装箱数据中心?

什么是集装箱数据中心?

过去几十年,数据中心给人的印象一直是一栋大型建筑,里面排列着密密麻麻的服务器机柜,配套复杂的供电、制冷、消防和网络系统。无论是互联网企业、金融机构,还是大型企业的信息化建设,都需要提前规划场地、建设机房、部署设备。 但随着云计算、大数据、人工智能和边缘计算…

2026/7/28 18:53:19 阅读更多 →
关于慢查询

关于慢查询

概述慢查询是指只要存在查询的地方就会有慢查询的问题&#xff0c;如关系型数据库&#xff08;mysql、oracle&#xff09;和非关系型数据库&#xff08;nosql,redis、MongoDB等&#xff09;&#xff0c;区别是它们设置慢查询的命令及方式不同而已。下面以中小型企业常用的mysql…

2026/7/28 18:53:19 阅读更多 →
乱七八糟的pwn入门(六)——5.passcode

乱七八糟的pwn入门(六)——5.passcode

审题 首先看题目&#xff1a;连上服务器&#xff0c;看一下这次的代码&#xff1a;#include <stdio.h> #include <stdlib.h>void login(){int passcode1;int passcode2;printf("enter passcode1 : ");scanf("%d", passcode1);fflush(stdin)…

2026/7/28 18:53:19 阅读更多 →
python爬虫之requests的基本使用# 基本的get请求 # response = requests.get('http://httpbin.org/get') # print(respons

python爬虫之requests的基本使用# 基本的get请求 # response = requests.get('http://httpbin.org/get') # print(respons

import requests # 基本的get请求 # response requests.get(http://httpbin.org/get) # print(response.text)# 带参数的get请求 # response requests.get("http://httpbin.org/get?namegermey&age22") # print(response.text) # 或者params的方法 # data{nam…

2026/7/28 18:53:19 阅读更多 →
开源鼠标自动化终极指南:从痛点识别到实战工作流的完整解决方案

开源鼠标自动化终极指南:从痛点识别到实战工作流的完整解决方案

开源鼠标自动化终极指南&#xff1a;从痛点识别到实战工作流的完整解决方案 【免费下载链接】MouseClick &#x1f5b1;️ MouseClick &#x1f5b1;️ 是一款功能强大的鼠标连点器和管理工具&#xff0c;采用 QT Widget 开发 &#xff0c;具备跨平台兼容性 。软件界面美观 &am…

2026/7/28 18:53:19 阅读更多 →
SpringBoot 使用Docker运行Elasticsearch

SpringBoot 使用Docker运行Elasticsearch

&#xff08;1&#xff09;使用docker images查询已安装应用&#xff08;2&#xff09;运行Elasticsearch&#xff0c;指令如下&#xff1a;docker run -e ES_JAVA_OPTS"-Xms256m -Xmx256m" -d -p 9200:9200 -p 9300:9300 --name ES01 6f8bf0ce76ea&#xff08;3&…

2026/7/28 18:52:19 阅读更多 →

日新闻

告别臃肿!3步让你的暗影精灵笔记本重获新生

告别臃肿!3步让你的暗影精灵笔记本重获新生

告别臃肿&#xff01;3步让你的暗影精灵笔记本重获新生 【免费下载链接】OmenSuperHub Control Omen laptop performance, fan speeds, and keyboard lighting, and unlock power limits. 项目地址: https://gitcode.com/gh_mirrors/om/OmenSuperHub 你是否也曾为官方Om…

2026/7/28 0:00:43 阅读更多 →
RAG必踩坑!财报法规检索不准?这款开源工具让答案浮出水面,准确率飙升98.7%!

RAG必踩坑!财报法规检索不准?这款开源工具让答案浮出水面,准确率飙升98.7%!

做 RAG 的人应该都踩过这个致命的坑&#xff1a;把几百页的财报、法规、技术手册扔给向量库&#xff0c;问一个具体问题&#xff0c;搜出来的全是沾边但没用的内容 —— 关键信息要么被硬切块拆碎了&#xff0c;要么藏在几十条结果的最下面。语义相似≠真正相关&#xff0c;这个…

2026/7/28 0:00:43 阅读更多 →
抖音视频文案提取工具全指南:免费2026版、手机App、在线工具一网打尽

抖音视频文案提取工具全指南:免费2026版、手机App、在线工具一网打尽

2026年做短视频运营&#xff0c;从抖音上扒文案早就不是偷偷抄笔记的事了。我刚开始做内容的时候&#xff0c;每天刷半小时抖音&#xff0c;手动把爆款视频的口播敲进备忘录&#xff0c;一条2分钟的视频得花十来分钟&#xff0c;碰到语速快的还要反复回听。后来试了一圈工具&am…

2026/7/28 0:00:43 阅读更多 →

周新闻

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 数据集6000张 完整源码已标注数据集训练好的模型环境配置教程程序运行说明文档&#xff0c;可以直接使用&#xff01;系统支持图片、视频、摄像头等多种方式检测裂缝&#xff0c;功能强大实用。 1数据集6000张 8各类别

2026/7/28 12:04:22 阅读更多 →
深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

pubg数据集 精选原图1.42万数据 1.49万标签 无任何重复、算法增强或冗余图像&#xff01; pubg绝地求生目标检测数据集 1分类&#xff1a;e_body&#xff0c;14905个标签&#xff0c;txt格式 共计14244张图&#xff0c;99%为640*640尺寸图像 适合yolo目标检测、AI训练关键词&am…

2026/7/28 8:29:16 阅读更多 →
Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex检测数据集数据集详情检测类别&#xff1a; allies enemy tag图片总量&#xff1a;7247张训练集&#xff1a;5139张验证集&#xff1a;1425张测试集&#xff1a;683张标注状态&#xff1a;全部已标注&#xff0c;即拿即用数据格式&#xff1a;支持YOLO格式及其他格式&#…

2026/7/28 5:03:42 阅读更多 →

月新闻