【不断更新贴】总结编程的技巧、语法等,需要多敲代码、记忆掌握
来源:互联网 发布:数控车床编程代码讲解 编辑:程序博客网 时间:2024/06/05 00:28
{
cv::rectangle(img,box.tl(),box.br(),cv::Scalar(g_rng.uniform(0, 255), g_rng.uniform(0,255), g_rng.uniform(0,255)));//随机颜色
}
注意: Rect类型可以直接通过Rect.tl() Rect.br() 获取矩形的左上角、右下角坐标
查看源码的定义:! the top-left corner
//Point_<_Tp> tl() const;
//! the bottom-right corner
//Point_<_Tp> br() const;
2.随机颜色: RNG g_rng(12345);
cv::rectangle(img,box.tl(),box.br(),cv::Scalar(g_rng.uniform(0, 255), g_rng.uniform(0,255), g_rng.uniform(0,255)));//随机颜色
查看RNG源码:
/! returns uniformly distributed double-precision floating-point random number from [a,b) range
//double uniform(double a, double b);
3.深度复制MAT
(1)Mat srcImage(600, 800,CV_8UC3), tempImage;
srcImage.copyTo(tempImage);
(2)Mat tempImage=srcImage.clone()
4.定义ROI区域
Mat image=imread("~~~~");
Mat imageROI=image(Rect(300,230,logo.cols,logo.rows));
5. convertScaleAbs
使用线性变换转换输入数组元素成8位无符号整型。 convertScaleAbs( normImage, scaledImage );//将归一化后的图线性变换成8位无符号整型
normalize( dstImage, normImage, 0, 255, NORM_MINMAX, CV_32FC1, Mat() );
函数原型:
void normalize(InputArray src,OutputArray dst, double alpha=1, doublebeta=0, int norm_type=NORM_L2, int dtype=-1, InputArray mask=noArray() )
该函数归一化输入数组使它的范数或者数值范围在一定的范围内。
Parameters:
src
输入数组
dst
输出数组,支持原地运算
alpha
range normalization模式的最小值
beta
range normalization模式的最大值,不用于norm normalization(范数归一化)模式。
normType
归一化的类型,可以有以下的取值:
NORM_MINMAX:数组的数值被平移或缩放到一个指定的范围,线性归一化,一般较常用。
NORM_INF: 此类型的定义没有查到,根据OpenCV 1的对应项,可能是归一化数组的C-范数(绝对值的最大值)
NORM_L1 : 归一化数组的L1-范数(绝对值的和)
NORM_L2: 归一化数组的(欧几里德)L2-范数
dtype
dtype为负数时,输出数组的type与输入数组的type相同;
否则,输出数组与输入数组只是通道数相同,而tpye=CV_MAT_DEPTH(dtype).
mask
操作掩膜,用于指示函数是否仅仅对指定的元素进行操作。
归一化公式:
1、线性函数转换,表达式如下:(对应NORM_MINMAX)
ifmask(i,j)!=0
dst(i,j)=(src(i,j)-min(src))*(b‘-a‘)/(max(src)-min(src))+ a‘
else
dst(i,j)=src(i,j)
其中b‘=MAX(a,b), a‘=MIN(a,b);
2. 当norm_type!=CV_MINMAX:
ifmask(i,j)!=0
dst(i,j)=src(i,j)*a/norm (src,norm_type,mask)
else
dst(i,j)=src(i,j)
其中,函数norm的功能是计算norm(范数)的绝对值
Thefunctions norm calculate an absolute norm of src1 (when there is no src2 ):
7. 创建同样大小、形状的图像
(1)Mat imgIn=imread(" XXXXX");
(2)Mat imgOut(newHeight, newWidth, imgIn.type()); // Mat resultImg; XXXXXXXX; resultImg.create(newHeight, newWidth, imgIn.type());
这两者是有区别的 ,Mat imgOut(newHeight, newWidth, imgIn.type()); 仅仅是在定义的时候声明创建 而 resultImg.create(newHeight, newWidth, imgIn.type()); 是在先声明,然后在函数中创建
(3)有待补充
8. 访问像素的几种方法
(1). for( i=0;i<DstHeight;i++)
{ uchar *dst_data=OutImg.ptr<uchar>(i);
for(j=0;j<DstWidth;j++)
dst_data[j]=.....
(2) for( i=0;i<DstHeight;i++)
for(j=0;j<DstWidth;j++)
{
if(img.channels()==3)
{
out1.at<Vec3b>(i,j)=Vec3b(255,0,0);
}
else if(img.channels()==1)
{
out1.at<uchar>(i,j)=255;
}
if(img.channels()==3)
{
out1.at<Vec3b>(i,j)=img.at<Vec3b>(i1,j1);//(j1,i1);
}
else if(img.channels()==1)
{
out1.at<uchar>(i,j)=img.at<uchar>(i1,j1);
9.注意代码中添加检查低级错误的代码 说不定哪天就会犯错误
今天就是的,至少检查了1个小时,还很郁闷
Mat SrcImg=imread("C:\\Users\\Administrator\\Desktop\\工作\\testp\\o1.jpg");
if(!SrcImg.data)
cout<<"读取图片错误\n";
//上面的o1.jpg 应该是01.jpg 一开始没有添加 就是内存报错 检查啊检查~~~~
- 【不断更新贴】总结编程的技巧、语法等,需要多敲代码、记忆掌握
- LINUX需要掌握的基础知识(不断更新)
- Jquery需要掌握的技巧
- 需要掌握的八个CSS布局技巧
- 需要掌握的八个CSS布局技巧
- 需要掌握的八个CSS布局技巧
- 需要掌握的八个CSS布局技巧
- 需要掌握的八个CSS布局技巧
- 需要掌握的八个CSS布局技巧
- 需要掌握的八个CSS布局技巧
- 需要掌握的八个CSS布局技巧
- sql需要掌握的基本优化技巧
- 需要掌握的八个CSS布局技巧
- GRE考试写作需要掌握的技巧
- Android 中需要掌握的高级技巧
- java需要掌握内容、核心不断更新中
- 编程人需要掌握的一些软件
- 代码规范总结(不断更新...)
- 搭建nginx与安装vsftpd提示530 Login incorrect
- 将ubuntu屏幕调大
- linux centos开启 80、22、3306端口方案
- UVA - 1644 - Prime Gap(找相邻素数差值)
- Makefile文件的编写
- 【不断更新贴】总结编程的技巧、语法等,需要多敲代码、记忆掌握
- 字符串处理------包含
- Sublime Text 3安装与使用
- Scalaz(40)- Free :versioned up,再回顾
- JDK+MyEclipse+Tomcat配置
- IOS开源项目学习---oschina
- flume高并发优化——(1)load_balance
- [剑指offer]合并两个排序的链表
- UISearchDisplayController灰色遮罩偏移