【opencv课后练习】-- 第三章节5-8

opencv第三章 生成透明通道及写出 #include <vector> #include <stdio.h> #include<opencv2/opencv.hpp> using namespace cv; using namespace std; //--------------------------------【createAlphaMat( )函数】---------... 阅读详情

题目5:学习使用感兴趣区域(ROI)。创建一个210*210的单通道图像并将其归0。在图中使用ROI和cvSet建立一个增长如金字塔状的数组,也就是:外部边界为0,下一个内部边界应该为20,在下一个内部边界为40,依此类推,直到最后内部值为200,所有边界应该为10个像素宽度。最后显示这个图形。

#include <cv.h>
#include <highgui.h>
#include <iostream>   
#include <vector>
using namespace std;  
using namespace cv;
int main ()
{
	//创建一个210*210的单通道图像
	IplImage* img = cvCreateImage(cvSize(210,210),8,1);
	//归0
	cvZero(img);
    int EdgeDistance=20;
    int EdgeWidth=10;

	for(int i = 0; i<= img->width-EdgeDistance; i=i+EdgeDistance+EdgeWidth)
	{
		CvPoint pt = cvPoint(i,i);
		CvRect RectROI1  = cvRect(pt.x,pt.y,img->width-pt.x,EdgeWidth);
		cvSetImageROI(img,RectROI1);
		cvSet(img,cvScalar(255));
		cvResetImageROI(img);
	}

	for(int i = 0; i<= img->width-EdgeDistance; i=i+EdgeDistance+EdgeWidth)
	{
		CvPoint pt = cvPoint(i,i);
		CvRect RectROI2  = cvRect(pt.x,pt.y,EdgeWidth,img->height-pt.y);
		cvSetImageROI(img,RectROI2);
		cvSet(img,cvScalar(255));
		cvResetImageROI(img);
	}
	cvNamedWindow("src");
	cvShowImage("src",img);
	cvWaitKey(0);
	cvDestroyWindow("src");
        cvReleaseImage(&img);
	return 0;
}

效果图:


题目7:使用cvCmp()创建一个掩码。加载一个真实的图像。使用cvSplit()将图像分割成红,绿,蓝三个单通道图像。
a. 找到并显示绿图。
b. 克隆这个绿图两次(分别命名为clone1和clone2)。
c. 求出这个绿色平面的最大值和最小值。
d. 将clone1的所有元素赋值为thresh=(unsigned char)((最大值-最小值)/2.0)。
e. 将clone2所有元素赋值为0,然后调用函数cvCmp (green_image, clone1, clone2, CV_CMP_GE)。现在clone2将是一个标识绿图中值超过thresh的掩码图像。

f. 最后,使用cvSubS(green_image,thresh/2, green_image, clone2)函数并显示结果。

/*
	使用cvCmp()创建一个掩码。加载一个真实的图像。使用cvSplit()将图像分割成红,绿,蓝三个单通道图像。
	a. 找到并显示绿图。
	b. 克隆这个绿图两次(分别命名为clone1和clone2)。
	c. 求出这个绿色平面的最大值和最小值。
	d. 将clone1的所有元素赋值为thresh=(unsigned char)((最大值-最小值)/2.0)。
	e. 将clone2所有元素赋值为0,然后调用函数cvCmp (green_image, clone1, clone2, CV_CMP_GE)。现在clone2将是一个标识绿图中值超过thresh的掩码图像。
	f. 最后,使用cvSubS(green_image,thresh/2, green_image, clone2)函数并显示结果。
*/
#include <opencv2/core/core.hpp>                  
#include <opencv2/highgui/highgui.hpp>                  
#include <opencv2/imgproc/imgproc.hpp>   
#include <iostream>                
using namespace std;  
using namespace cv;
void main ()
{
	IplImage *img = cvLoadImage("pic.jpg");
	IplImage *RedImage=cvCreateImage(cvGetSize(img),IPL_DEPTH_8U,1);  
    IplImage *GreenImage=cvCreateImage(cvGetSize(img),IPL_DEPTH_8U,1);  
    IplImage *BlueImage=cvCreateImage(cvGetSize(img),IPL_DEPTH_8U,1);  
	IplImage *clone1,*clone2;
	cvSplit(img,BlueImage,GreenImage,RedImage,0);  
	cvShowImage("blue",BlueImage);
	cvShowImage("red",RedImage);
	//a. 找到并显示绿图。
    cvShowImage("Green",GreenImage);
	//b.克隆这个绿图两次  
    clone1=cvCloneImage(GreenImage);  
    clone2=cvCloneImage(GreenImage);  
	//c. 求出这个绿色平面的最大值和最小值。
	double Max = 255;
	double Min = 50;
	cvMinMaxLoc(clone1,&Min,&Max);  
	//d.将clone1的所有元素赋值为thresh=(unsigned char)((最大值-最小值)/2.0)  
    double thresh=(Max-Min)/2.0;  
    cvSet(clone1,cvScalar(thresh)); 
	//e. 将clone2所有元素赋值为0,然后调用函数cvCmp (green_image, clone1, clone2, CV_CMP_GE)。现在clone2将是一个标识绿图中值超过thresh的掩码图像。
	cvSet(clone2,cvScalar(0));  
    cvCmp(GreenImage,clone1,clone2,CV_CMP_GE);  
	//f. 最后,使用cvSubS(green_image,thresh/2, green_image, clone2)函数并显示结果。
	cvSubS(GreenImage,cvScalar(thresh/2),GreenImage,clone2);  
	//显示
	cvShowImage("clone1",clone1);
	cvShowImage("clone2",clone2);
	cvWaitKey(0);
	cv::destroyAllWindows();
}

效果图:


题目8:创建一个结构,结构中包含一个整数,一个CvPoint和一个CvRect;称结构为"my_struct"。
    a. 写两个函数:void write_my_struct(CvFileStorage* fs, const char * name, my_struct* ms) 
和 void read_my_struct(CvFileStorage* fs, CvFileNode* ms_node, my_struct* ms)

   b. 创建一个元素为my_struct结构体且长度为10的数组,并将数组写入磁盘和从磁盘读入内存。

/*
		创建一个结构,结构中包含一个整数,一个CvPoint和一个CvRect;称结构为"my_struct"。
		a. 写两个函数:void write_my_struct(CvFileStorage* fs, const char * name, my_struct* ms) 
	和 void read_my_struct(CvFileStorage* fs, CvFileNode* ms_node, my_struct* ms)
		b. 创建一个元素为my_struct结构体且长度为10的数组,并将数组写入磁盘和从磁盘读入内存。
*/
#include <opencv2/core/core.hpp>                  
#include <opencv2/highgui/highgui.hpp>                  
#include <opencv2/imgproc/imgproc.hpp>   
#include <iostream>                
using namespace std;  
using namespace cv;
typedef struct my_struct{
    int data;
    CvPoint pt;
    CvRect rect;
}my_struct;
void write_my_struct(CvFileStorage* fs, const char * name, my_struct* ms)
{
	cvWriteInt(fs,name,10);  
	//开始写入新的数据结构  
    cvStartWriteStruct(fs,"int",CV_NODE_SEQ);  
	cvWriteInt(fs,0,ms->data);  
    //结束写入数据结构  
    cvEndWriteStruct(fs);  

	cvStartWriteStruct(fs,"CvPoint",CV_NODE_SEQ);  
	cvWriteInt(fs,0,ms->pt.x);  
	cvWriteInt(fs,0,ms->pt.y);  
	cvEndWriteStruct(fs); 

	cvStartWriteStruct(fs,"CvRect",CV_NODE_SEQ);  
	cvWriteInt(fs,0,ms->rect.x);  
	cvWriteInt(fs,0,ms->rect.y); 
	cvWriteInt(fs,0,ms->rect.height);  
	cvWriteInt(fs,0,ms->rect.width);
	cvEndWriteStruct(fs); 

}
void read_my_struct(CvFileStorage* fs, CvFileNode* ms_node, my_struct* ms)
{
	//读取文件
    fs=cvOpenFileStorage("data.xml",0,CV_STORAGE_READ);  
	//查找文件节点返回它的值  
    int value = cvReadIntByName(fs,0,"int",1);  
  
    //在图表或者文件存储器中查找节点  
    CvSeq* s = cvGetFileNodeByName(fs,0,"CvPoint")->data.seq; 
	CvSeq* r = cvGetFileNodeByName(fs,0,"CvRect")->data.seq; 
    //从文件节点中得到整形值,cvGetSeqElem用来检测序列  
    int point_x = cvReadInt((CvFileNode*)cvGetSeqElem(s,0));  
    int point_y = cvReadInt((CvFileNode*)cvGetSeqElem(s,1));  
	int rect_x = cvReadInt((CvFileNode*)cvGetSeqElem(r,0));
	int rect_y = cvReadInt((CvFileNode*)cvGetSeqElem(r,1));
	int rect_height = cvReadInt((CvFileNode*)cvGetSeqElem(r,2));
	int rect_width = cvReadInt((CvFileNode*)cvGetSeqElem(r,3));
	cout<<"点:("<<point_x<<","<<point_y<<")"<<endl;
	cout<<"矩阵数据:"<<endl;
	cout<<"起始点坐标为:("<<rect_x<<","<<rect_y<<")"<<endl;
	cout<<"矩阵宽度:"<<rect_width<<endl;
	cout<<"矩阵高度:"<<rect_height<<endl;
    cvReleaseFileStorage(&fs);  
}
int main()  
{    
    //创建data.xml
    CvFileStorage* fs=cvOpenFileStorage("data.xml",0,CV_STORAGE_WRITE);  
    //创建内容
    my_struct myst={10,cvPoint(5,5),cvRect(0,0,1,5)};  
    //写 
    write_my_struct(fs,"data",&myst);  
    cvReleaseFileStorage(&fs);  
    //读 
    read_my_struct(fs,NULL,&myst);  
	system("pause");
    return 0;  
}  

效果图:

基于YOLOv8的OpenCV部署 导出onnx格式模型的时候,注意,如果你是自己训练的模型,只需要把以下代码中yolov8n.pt修改为自己的模型即可,如best.pt。如果是下面代码中默认的模型,并且你没有下载到本地,系统会自动下载,我这里在文章末尾提供了下载链接。在章节一中,安装了ultralytics的时候,默认安装了opencv-python4.8.0.74,所以推理的时候可以直接利用这个python环境。输出如下图信息,表明onnx格式的模型被成功导出,保存在my_export.py同一级目录。 阅读详情

相关推荐

Windows 10系统中安装和配置OpenCV 3.2.0与Qt 5.8.0的完整指南

Visual Studio是一个集成开发环境(IDE),由微软公司开发,用于计算机程序的开发。Visual Studio 2015是其中的一个版本,它的出现标志着微软从经典桌面应用到移动应用和云服务的开发跨越。Visual Studio 2015提供了多个不同版本,包括社区版(Community)、专业版(Professional)、企业版(Enterprise)等。社区版是免费的,并且支持专业开发工具的功能,适合个人开发者和小型团队;专业版则为独立开发者和小团队提供了更丰富的功能;

weixin_42160645的博客 713

3-39 声明像素类

首先给出点类 package test329; public class Point { public int x, y; public Point(int x, int y){ this.x = x; this.y = y; } public Point(){ this(0, 0); } public Point(Point p){ this(p.x, p.y); } pu

听取WA声一片 2864

从头开始:OpenCV 4.5.0及opencv_contrib版本编译指南

OpenCV(Open Source Computer Vision Library)是一个跨平台的计算机视觉和机器学习软件库,广泛应用于图像处理、视频分析、特征检测等领域。随着计算机视觉技术的不断进步,OpenCV也在持续更新和演进,最新版本为OpenCV 4.5.0。opencv_contrib包含了社区贡献的额外模块,为OpenCV提供了更丰富的功能,例如图像分割、文本检测、深度学习集成等。

weixin_33363025的博客 1324

RGB像素类的实现pixel.cpp

/*---------------------------------------------------*//*Implement of pixel class *//*File name: pixel.cpp */#include "pixel.h"//三个构造函数的实现pixel...

weixin_30416497的博客 394

在Unreal Engine 5中集成OpenCV库的步骤详解

本文还有配套的精品资源,点击获取 简介:本文详细介绍了在Unreal Engine 5(UE5)游戏引擎中加载和使用OpenCV库的方法。OpenCV是一个强大的计算机视觉库,支持图像处理和机器学习功能,通过将OpenCV集成到UE5,开发者能够为游戏添加高级视觉处理和实时分析能力。文章逐步说明了安装OpenCV库、配置项目设置、编写模块、链接库文件、编译测试、运行时动态加...

weixin_31139479的博客 2440

Windows 8下的Qt 5.9.1与OpenCV 3.3.1集成开发环境编译文件

Qt 是一个跨平台的C++应用程序框架,广泛用于开发具有图形用户界面的应用程序。它提供了丰富的API和工具,包括窗口、控件、图形渲染和多线程等,大大简化了开发过程。而OpenCV(Open Source Computer Vision Library)是一个强大的计算机视觉和机器学习软件库。它包括了数百种图像处理和计算机视觉相关的函数,被广泛应用于研究、开发和工业应用。

weixin_42433737的博客 1037

练习3-7 使用cvCmp()创建一个掩码。加载一个真实的图像。使用cvSplit()将图像分割成红,绿,蓝三个单通道图像。

7. 使用cvCmp()创建一个掩码。加载一个真实的图像。使用cvSplit()将图像分割成红,绿,蓝三个单通道图像。a. 找到并显示绿图。b. 克隆这个绿图两次(分别命名为clone1和clone2)。c. 求出这个绿色平面的最大值和最小值。d. 将clone1的所有元素赋值为thresh=(unsigned char)((最大值-最小值)/2.0)。e. 将clone2所有元素赋值为0,然后调...

baidu_39556713的博客 563

从零构建工业级SPI-CAN网关:CH347与CH9431的软硬件协同设计实战

本文详细介绍了基于CH347和CH9431芯片构建工业级SPI-CAN网关的完整方案。通过硬件架构设计、Linux驱动定制、并发处理优化和EMC抗干扰测试,实现高可靠性通信网关,适用于工业自动化和汽车电子等严苛环境。

spark7igniter的博客 632

《学习OpenCV》课后习题解答6

题目:(P104) 使用cvCmp()创建一个掩码。加载一个真实的图像。使用cvsplit()将图像分割成红,绿,蓝三个单通道图像。 a.找到并显示绿图。 b.克隆这个绿图两次(分别命名为clone1和clone2)。 c.求出这个绿色平面的最大值和最小值。 d.将clone1的所有元素赋值为theash=(unsigned char)((最大值-最小值)/2.0)。...

weixin_30672019的博客 161

抖音无人直播技术全解析:从原理、实操到合规化思考

直播技术作为内容分发的核心形式,其底层依赖于流媒体协议(如RTMP)与实时音视频编码推流。通过OBS等软件进行场景合成与虚拟摄像头技术,可以实现丰富的画面包装与自动化播放。这项技术的核心价值在于突破人力与时间的限制,实现内容的持续输出与流量获取,在电商带货、品牌展示、陪伴式内容等场景中具有应用潜力。然而,单纯依赖录播循环存在高风险,平台风控系统会通过内容重复性检测与互动行为模型进行识别。因此,更可持续的方向是探索“半无人直播”或自动化辅助工具,例如利用AI数字人驱动或直播切片技术,在合规前提下提升运营效率。

weixin_29895109的博客 508

STM32项目实战_基于STM32F103的智能药箱设计与实现(硬件详解+软件逻辑+调试要点)

本文详细介绍了基于STM32F103的智能药箱设计与实现,涵盖硬件设计、软件逻辑和调试要点。项目核心功能包括精准提醒、药品管理和远程监控,采用STM32单片机作为主控,结合光电开关、蓝牙模块等实现智能化管理。文章还分享了电路图设计、程序优化及常见问题解决方案,为嵌入式开发爱好者提供实用参考。

weixin_28717683的博客 303

《学习OpenCV》第三章课后题7

题目说明: 使用cvCmp()创建一个掩码。加载一个真实的图像。使用cvSplit()将图像分割成红,绿,蓝三个单通道图像。 a.找到并显示绿图 b.克隆这个绿图两次(分别命名为clone1和clone2)。的 c.求出这个绿色平面的最大值和最小值。 d.将clone1所有元素赋值为thresh=(unsigned char)((最大值-最小值)/2.0)。 e.将clone2所有元素赋

南北粉面馆 693

C++实战:基于ONNX Runtime与OpenCV部署XFeat图像匹配模型

本文详细介绍了在C++环境中,利用ONNX Runtime与OpenCV高效部署XFeat图像匹配模型的完整流程。内容涵盖环境搭建、模型转换、核心代码封装及可视化实现,旨在帮助开发者将这一先进的深度学习模型集成到对性能要求苛刻的工业或嵌入式应用中,实现鲁棒且快速的特征匹配。

gpu4optimizer的博客 522

Learning OpenCV 3 章节习题——第6章

目录 1.绘图练习 2.灰度练习 3.动态文字练习 4.编写绘图程序 5.计算直线的像素数 5.1 什么情况下4连通和8连通能得到相同的像素数? 5.2 哪一种连通方式有更多的像素数? 5.3 在4连通和8连通的两种情况下,对于一条给定的直线段,直线长度和使用迭代器计算出的像素数之间的区别是什么?哪一种连接更接近真实的直线长度? 1 绘图练习 //1.绘图练习 //1.1 ...

qiao_lili的博客 1274

2023年12月青少年C/C++软件编程(三级)等级考试试卷及答案解析

有一批易感人群住在网格状的宿舍区内,宿舍区为n*n的矩阵,每个格点为一个房间,房间里可能住人,也可能空着。在第一天,有些房间里的人得了流感,以后每天,得流感的人会使其邻居传染上流感,(已经得病的不变),空房间不会传染。第一行一个数字n,n不超过100,表示有n*n的宿舍房间。接下来的n行,每行n个字符,’.’表示第一天该房间住着健康的人,’#’表示该房间空着,’@’表示第一天该房间住着得流感的人。输出为一行,表达式的值。任给两个正整数N、M,求一个最小的正整数a,使得a和(M-a)都是N的因子。

长春高老师编程 1511

Python 爬虫实战:爬取豆瓣读书评论并分析

摘要:本文以豆瓣读书《活着》评论数据为例,详细讲解Python爬虫开发与文本分析全流程。首先通过requests库爬取评论数据,解决分页、反爬等问题;然后利用BeautifulSoup解析页面提取评论内容、评分等核心信息;最后结合jieba进行关键词提取、snownlp完成情感分析,并通过可视化展示结果。分析显示该书评分以5星为主(占比70%),正面评论达82%,核心关键词为"活着""余华""生命"。全文包含完整代码与详细解析,帮助读者掌握非结构化

2503_91057718的博客 1497

《Learning OpenCV 4 Computer Vision with Python 3》第三版 使用说明

本项目是基于Python的开源计算机视觉学习项目,目录结构如下: ``` Learning-OpenCV-4-Computer-Vision-with-Python-Third-Edition/ ├── appendix/ # 附录相关代码 ├── chapter02/ # 第二章代码 ├── chapter03/

gitblog_00970的博客 1182

基于Claude Code的 规范驱动开发(SDD)指南

传统的AI辅助开发,如同手工作坊,我们向AI描述想法,它给我们零散的部件,我们再手动打磨、组装。这个过程充满了不确定性、信息损耗和重复劳动。本指南将尝试引领您进入软件开发的“工业时代”。在这里,

形上得其象,形下合于数;阴阳自济,玄理自明。 2749

yolov8 opencv模型部署(python版)

使用opencv推理yolov8模型,以yolov8n为例子,一共几十行代码,给出了注释。

整理ing 4224

化工设计软件:AVEVA E3D二次开发_(8).管道系统设计

在 AVEVA E3D Design 中,管道规格的定义是确保设计一致性和标准化的关键。通过二次开发,可以自动生成并管理管道规格。下面是一个示例,展示如何通过编写脚本来定义和管理管道规格。# 导入必要的库 import clr。

kkchenjj的博客 976

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

【opencv课后练习】-- 第三章节2-4

题目2:创建一个三通道二维矩阵,字节类型,大小为100*100,并设置所有数值为0 。        a.在矩阵中使用void cvCircle(CvArr* img,CvPoint center,intradius,CvScalar color,int thickness = 1,int line_type = 8,int shift = 0)            b.使用第2章所学的方法来显...

淡泊明志 宁静致远 405

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

【opencv课后练习】-- 第二章节

      网上查了下,没能找到关于learning opencv的课后习题讲解,现张贴出自我学习过程的code,与广大Coder共同探讨学习,多多指出小弟的错误,谢谢。题目:使用例2-10中的视频捕捉和存储方法,结合例2-5中的doPyrDown()创建一个程序,使其从摄像机读入视频数据并将缩放变换后的彩色图像存入磁盘。/* 使用例2-10中的视频捕捉和存储方法,结合例2-5中的doPyrDo...

淡泊明志 宁静致远 390

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Qt5+OpenCV3.4.6环境搭建

Qt5+OpenCV3.4.6环境搭建准备工作确认Qt编译器配置cmakeMinGW编译Qt5配置OpenCVQt5调用OpenCV 准备工作 1.Qt5 (Qt官网下载https://www.qt.io/) 2.cmake(cmake官网下载 https://cmake.org/download/) 3.OpenCV(OpenCV官网下载https://opencv.org/) 这边采用的是Qt...

CarbonPie 8549

QT5.8.0+VS2015+OpenCV4.1.2 配置Windows 32位和64位平台

目录 一 目的 二 使用资源 1. QT5.8.0Windows32位版本 2. OpenCV4.1.2源码 3.CMake 3.18.0 Windows64位版本 4.winsdksetup.exe 三配置过程 1.安装QT5.8.0Windows32位版本 2.编译OpenCV4.1.2源码生成Win32版本的DLL库和Lib库 3.VS配置QT5.8.0 32位 一 目的 最近开发显示界面相关功能,使用的是QT5.8.0+VS2015+OpenCV4.1.2,...

Bixiwen_liu的博客 1429

【图文详解】VSCode中配置并快速使用第三方OpenCV库(详细图文教程)

VSCode中配置并快速使用第三方OpenCV库

qq_40280673的博客 2万+

【Java版本OpenCV】无敌OpenCV越学越爽Java版代码持续更新(环境搭建|核心代码)

Java版本OpenCV代码实战,springboot整合opencv,包括linux,windows下opencv环境搭建,章节代码演示

Java领域优秀创作者 7806
上一篇: 【opencv课后练习】-- 第三章节2-4
下一篇: 【opencv课后练习】-- 第四章节2-3
Dynamic丶G
博客等级 码龄12年 3粉丝 10原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值