数字图像处理小练习存档1

小练习的题目:

1、读取一张图,分解RGB三个通道

/************练习1**********************/
int main()
{Mat img1 = imread("D:\\opencv_picture_test\\miku2.jpg",2|4);			//灰度图if (img1.empty()){printf("Could not find the image!\n");return -1;}std::vector<cv::Mat> channels;cv::split(img1,channels);Mat B = channels.at(0);Mat G = channels.at(1);Mat R = channels.at(2);imshow("blue", B);imshow("green", G);imshow("red", R);waitKey(0);return 0;
}

2、调用本机摄像头

/************练习2**********************/
int main()
{//实例化的同时初始化//调用摄像头VideoCapture capture(0);		//类似于 int a=1;/*先实例化VideoCapture capture;再初始化capture.open("D:\\opencv_picture_test\\video1.avi");*/while (1){Mat frame;	//存储每一帧的图像capture >> frame;	//读取当前帧imshow("原视频", frame);	//显示当前帧//进行腐蚀操作Mat element = getStructuringElement(MORPH_RECT, Size(15, 15));	//返回的是内核矩阵Mat dstImage;erode(frame, dstImage, element);					//腐蚀操作imshow("处理后的视频", dstImage);	//显示当前帧if(waitKey(10) >= 0) break;	//延时10ms}return 0;
}

3、opencv基本绘图功能

int main()
{Mat displayMat = imread("D:\\opencv_picture_test\\RGB纯色图\\blue.jpg", 0);			//灰度图if (displayMat.empty()){printf("Could not find the image!\n");return -1;}//画圆Point pt;		//圆心pt.x = 90;pt.y = 90;circle(displayMat, pt, 20, CV_RGB(0, 255, 0), 1, 8, 0);		//画圆的目标图像  圆心的点  圆的半径   圆的颜色  //		圆的线条粗细,取-1为绘制实心圆			领接关系和偏移,一般设置默认值,8和0//画线段Point pt1;		//起点pt1.x = 100;		pt1.y = 100;Point pt2;		//终点pt2.x = 300;pt2.y = 300;line(displayMat, pt1, pt2, CV_RGB(0, 255, 0), 10, 8, 0);//目标图像  起点 终点//		线条粗细,			领接关系和偏移,一般设置默认值,8和0//画矩形框Rect rect;		rect.x = 20;rect.y = 20;rect.width = 20;rect.height = 20;rectangle(displayMat, rect, CV_RGB(0, 255, 0), 1, 8, 0);//的目标图像  目标矩形 //		线条粗细,取-1为绘制实心矩形			领接关系和偏移,一般设置默认值,8和0imshow("图片", displayMat);waitKey(0);return 0;}

运行效果效果

4、构建一个直方图

///*--------------------------【练习4】绘制一维灰度直方图-------------------------------------*/
Mat	My_Rraw_histogram(Mat* srcImage)		//输入:要处理的灰度图   输出:该图像的直方图
{//【2】定义变量MatND dstHist;int dims = 1;		//需要计算的直方图的维数float grayranges[] = { 0,255 };const float* ranges[] = { grayranges };	//这里需要为const类型int size = 256;			//表示的是将统计的灰度值分成的等份int channels = 0;	//灰度图只有一个0通道//【3】计算图像直方图calcHist(srcImage,	//输入数组1,	//数组个数&channels,	//通道索引Mat(),//不使用掩膜dstHist,	//输出的目标直方图dims,	//需要计算的直方图的维数&size,	//存放每个维度的直方图尺寸的数组ranges);	//每一维数值的取值范围	int scale = 1;		//scale 每一个像素占的格数Mat dstImage(size * scale, size, CV_8U, Scalar(0));		//长 :size*scale ,宽:size ,值为0//【4】获取最大值和最小值double minVal = 0;double maxVal = 0;minMaxLoc(dstHist, &minVal, &maxVal, 0, 0);		//获得直方图中最大值和最小值//【5】绘制出直方图int hpt = saturate_cast<int>(0.9 * size);			//saturate_cast 是溢出保护    大概意思 :if(data<0)  data = 0; else if (data > 255) data = 255;for (int i = 0;i < 256;i++){float binVal = dstHist.at<float>(i);int realVal = saturate_cast<int>(binVal * hpt / maxVal);		//在图像上的高度 = 像素值/最大像素值 * 0.9*256   这里0.9是为了削减图像像素高度,因为最大的时候会触及顶端不美观rectangle(dstImage, Point(i * scale, size - 1), Point((i + 1) * scale - 1, size - realVal), Scalar(255));//要进行绘制的目标图像 矩形的左下顶点 矩阵对角线上的右上顶点 线条的颜色(RGB)或亮度(灰度图)  一共要绘制256个矩形}return dstImage;
}
//主函数
int main()
{//【1】载入原图Mat srcImage = imread("D:\\opencv_picture_test\\新垣结衣\\test2.jpg", 0);			//原图的灰度图namedWindow("灰度图", WINDOW_NORMAL);//WINDOW_NORMAL允许用户自由伸缩窗口imshow("灰度图", srcImage);if (srcImage.empty()){printf("Could not find the image!\n");return -1;}Mat dstImage = My_Rraw_histogram(&srcImage);namedWindow("一维直方图", WINDOW_NORMAL);//WINDOW_NORMAL允许用户自由伸缩窗口imshow("一维直方图", dstImage);waitKey(0);return 0;
}

运行结果:
原图
一维直方图
嘿嘿,水了一篇文章。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/378754.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

UIImage 压缩

1.改变图片大小 -(UIImage*)imageWithImage:(UIImage*)image scaledToSize:(CGSize)newSize {// Create a graphics image contextUIGraphicsBeginImageContext(newSize);// Tell the old image to draw in this new context, with the desired// new size[image drawInRect:CG…

06-对图像进行腐蚀操作

形态学中的腐蚀操作一般处理的图像数据为二值的 cv2.erode(img,kernel,iterations 1) kernel表示拿多大的卷积核去腐蚀 iterations表示迭代次数 可以将一些带有毛毛的图像去毛毛化 原图 import cv2 import numpy as npdef show_photo(name,picture):cv2.imshow(name,picture)…

Java BufferedReader skip()方法与示例

BufferedReader类skip()方法 (BufferedReader Class skip() method) skip() method is available in java.io package. skip()方法在java.io包中可用。 skip() method is used to skip the given number of bytes of characters (n_bytes_of_char) from this BufferedReader. s…

mysql gtid binlog_MySQL之-四步实现BinLog Replication升级为GTIDs Replication的代码实例

1、将Master和Slave服务器都设置为read-onlymysql>SET global.read_onlyON;2、将Master与Slave服务器都停下来service mysql stop3、开启GTIDs开启GTIDs需要在master和slave服务器上都配置gtid-mode,log-bin,log-slave-updates,enforce-gtid-consistency(在MySQL 5.6.9之前是…

【记】琐碎

1.GIF载入问题:http://www.cnblogs.com/Lewis/archive/2011/01/17/1937066.html 2.正则分段数字&#xff1a; "12345678945612456".replace(new RegExp((\\d)(?(\\d{3})$),ig),"$1,") 其中用到了正则的后则判断? 3.给legend设定宽度 发现IE下可以 火狐下…

spring对事务的控制 AOP

我解释一下(* com.evan.crm.service.*.*(..))中几个通配符的含义&#xff1a; |第一个 * —— 通配 任意返回值类型| |第二个 * —— 通配 包com.evan.crm.service下的任意class| |第三个 * —— 通配 包com.evan.crm.service下的任意class的任意方法| |第四个 .. —— 通配 方…

Opencv实现利用滑动条来调整阈值

#include <opencv2/opencv.hpp> #include <iostream>using namespace cv; using namespace std; #define WINDOW_NAME "【程序窗口】" //为窗口标题定义的宏 //*--------------------------【练习】利用滑动条来调整阈值-----------------------------…

07-对图像进行膨胀操作

形态学中的膨胀操作即让照片变得更大&#xff0c;与腐蚀操作互为逆运算 cv2.dilate(erosion,kernel,iterations 1) 第一个参数&#xff1a;图像对象名称 第二个参数&#xff1a;卷积核的大小 第三个参数&#xff1a;迭代次数 此时就可与腐蚀操作进行相结合&#xff0c;腐蚀去毛…

Java LocalDate类| parse()方法与示例

LocalDate类parse()方法 (LocalDate Class parse() method) Syntax: 句法&#xff1a; public static LocalDate parse(CharSequence c_seq);public static LocalDate parse(CharSequence c_seq, DateTimeFormatter fmtr);parse() method is available in java.time package. …

Xhtml学习笔记

1. XHTML 是什么&#xff1f; XHTML 指可扩展超文本标签语言&#xff08;EXtensible HyperText Markup Language&#xff09;。 XHTML 的目标是取代 HTML。 XHTML 与 HTML 4.01 几乎是相同的。 XHTML 是更严格更纯净的 HTML 版本。 XHTML 是作为一种 XML 应用被重新定义的 HTML…

08-开运算和闭运算

开运算和闭运算实则就是将腐蚀操作和膨胀操作结合而已&#xff0c;也就是个先后循序罢了 开运算&#xff1a;先腐蚀再膨胀 闭运算&#xff1a;先膨胀再腐蚀 cv2.morphologyEx(img_open,cv2.MORPH_OPEN,kernel) cv2.morphologyEx(img_close,cv2.MORPH_CLOSE,kernel) 第一个参数…

连通域标记——实现硬币自动计件

前言 在自动计算图像中有几枚硬币的任务中&#xff0c;分离出前景和背景后是否就可以马上实现自动计件&#xff0c;如果可以&#xff0c;如何实现&#xff1f;如果不可以&#xff0c;为什么&#xff1f; 答案是否定的。二值化之后我们的得到的只是前景总像素的多少&#xff0c…

Storm资料汇总

一、Storm集群安装部署 网上关于storm集群部署都大同小异。 Storm下载地址&#xff1a;http://storm-project.net Storm项目地址&#xff1a;https://github.com/nathanmarz/storm 目前的版本不支持ZooKeeper3.4.5版本&#xff0c;而支持ZooKeeper3.3.3版本。 我当时没注意这…

getlong_Java即时类| 带示例的getLong()方法

getlong即时类getLong()方法 (Instant Class getLong() method) getLong() method is available in java.time package. getLong()方法在java.time包中可用。 getLong() method is used to get the value as long for the given temporal field from this Instant. getLong()方…

python作品阐述_Python网络编程基础的作品鉴赏-

Python网络编程基础的作品鉴赏Python网络编佳入门图书&#xff01;175个完整&#xff0c;实践出真知&#xff0c;SocketsDNS、Web Service、FTP、Email、SMTP、POP、IMAP、SocketServe、CGI、XML、Forking、数据库客户端、多线程、异步通信……完整涵盖网络编程的方方面面“这可…

09-梯度运算

梯度运算膨胀操作-腐蚀操作&#xff0c;这里的-操作是图像的减法&#xff0c;可不是简单的加减乘除运算 为了更加形象生动&#xff0c;先将膨胀和腐蚀操作的结果进行合并展示&#xff0c;然后再与梯度运算进行比较 cv2.morphologyEx(pie,cv2.MORPH_GRADIENT,kernel) 第一个参数…

JavaScript学习笔记-我的浅显认识

一&#xff1a;什么是javascript? 它是一种基于对象和事件驱动的解释性的安全的与平台无关的免费的浏览器脚本语言。 二&#xff1a;有什么用途&#xff1f; 使表单的验证放在客户端&#xff0c;更快捷反应&#xff0c;增强网页的交互性。设计一些特效&#xff0c;如菜单&…

典型瀑布模型四个阶段_古典瀑布模型的不同阶段

典型瀑布模型四个阶段The different phases that are included in the classical waterfall model are: 经典瀑布模型包含的不同阶段是&#xff1a; Feasibility study 可行性研究 Requirement analysis and specification 需求分析和规范 Design 设计 Coding and unit testin…

Unity-Shader-渲染队列

Unity-Shader-渲染队列 渲染简介Unity中的几种渲染队列Background (1000)最早被渲染的物体的队列。Geometry (2000) 不透明物体的渲染队列。大多数物体都应该使用该队列进行渲染&#xff0c;也就是Unity Shader中默认的渲染队列。AlphaTest (2450) 有透明通道&#xff0c;需要进…

MyBatis ResultMap(2)

SQL 映射XML 文件是所有sql语句放置的地方。需要定义一个workspace&#xff0c;一般定义为对应的接口类的路径。写好SQL语句映射文件后&#xff0c;需要在MyBAtis配置文件mappers标签中引用&#xff0c;例如&#xff1a; Xml代码 <mappers> <mapper resource&qu…