OpenCV随机方法使用

news/2024/7/8 5:55:57 标签: 数据结构, image, float, 图形, 编译器, system

OpenCV也提供了另一个数据结构来做Rand的实作,CvRandState,被包在"cvcompat.h"里,"cvcompat.h"的完整意 思是Computer Vision Compatility,CvRandState的特色是可以选定常态分布及均匀分布,不过,它只能运用在矩阵跟一维数组.

矩阵的部份程序代码如下

RandState矩阵的实作
#include <cv.h>
#include <highgui.h>

int main()
{
    IplImage *Image1;

    CvSize ImageSize1 = cvSize(320,240);
    Image1 = cvCreateImage(ImageSize1,IPL_DEPTH_8U,3);
    cvZero(Image1);

    CvRandState RandState1;
    cvRandInit(&RandState1,0,255,cvGetTickCount(),CV_RAND_UNI);

    cvRandSetRange(&RandState1,0,127,0);
    cvRandSetRange(&RandState1,128,255,1);

    cvRand(&RandState1,Image1);

    cvNamedWindow("cvRand",1);
    cvShowImage("cvRand",Image1);
    cvWaitKey(0);
}

这 个结果也好玩了,因为它随机的范围RGB值都不一样,因此执行结果为偏绿色的随机数,这边,开启了一个Channel为3的RGB图形,给他全0的值,让 他变成黑色,接着,使用CvRandState数据结构,用cvRandInit()初始化它,随机范围是0~255,种子是时间(可输入大小为 64bits),均匀分布,这里会使个它的随机RGB值范围都是0~255,接着,用cvRandSetRange()改变了B(第三个参数)值的范围为 0~127,再用cvRandSetRange()改变G值范围为128~255,而R值,没有被cvRandSetRange()改变到,因此它的范围 是0~255,再来就是设定图形啦,给它的是Image1及被设定过后的RandState1,会对图形自动产生随机,跟CvArr()一样,不过这边可 以任意改变RGB值范围,而这里不一定是要用到通道3的RGB值,可以用通道格式为1,2,3的图形.

再来是一维数组的实作

RandState一维数组的实作
#include <cv.h>
#include <highgui.h>
#include <stdio.h>
#include <stdlib.h>

int main()
{
    float FloatArray[20];
    CvRandState RandState1;
    cvRandInit(&RandState1,30,20,cvGetTickCount(),CV_RAND_NORMAL);
    cvbRand(&RandState1,FloatArray,20);
    for(int i=0;i<20;i++)
    {
        printf("%f/n",FloatArray[i]);
    }
    system("pause");

    free(&RandState1);
}

这 边开启了一个空间为20个float数组,RandState1数据结构及初始化它,给他常态分布,平均数为30标准偏差为20,及以时间的种子,再用 cvbRand()制作常态分布随机数组,给他CvRandState数据结构,float数组名,及随机的大小,亦可以随机到前十个数组空间就好.这 里数组规定要用Float型别做随机实作,在做printf()就必须要用"%f".

cvRandInit()
初始化CvRandState数据结构,可以选定随机分布的种类,并给定它种子,有两种情形
cvRandInit(CvRandState数据结构,随机上界,随机下界,均匀分布参数,64bits种子的数字)
cvRandInit(CvRandState数据结构,平均数,标准偏差,常态分布参数,64bits种子的数字)

(问题编译器如何识别?)


cvRandSetRange()
修改CvRandState数据结构的参数内容,均匀分布的话可以每个信道的上下界常态分布可以修改每个通道的平均数,标准偏差.
cvRandSetRange(CvRandState数据结构,均匀分布上界,均匀分布下界,目标信道数据)
cvRandSetRange(CvRandState数据结构,常态分布平均数,常态分布标准偏差,目标信道数据)

cvRand()
将CvMat或IplImage数据结构随机化,用被设定过的CvRandState数据结构来随机.
cvRand(CvRandState数据结构,CvMat或IplImage数据结构)

cvbRand()
将一维数组随机化,可以设定随机的长度
cvbRand(RandState数据结构,Float型别数组名,随机的长度);


http://www.niftyadmin.cn/n/790952.html

相关文章

对RSA和AES的理解

原文地址&#xff1a;https://blog.csdn.net/huanhuanq1209/article/details/80614271 1、RSA和AES的区别&#xff1a; 总结于&#xff1a;http://www.360doc.com/content/16/0606/15/12385684_565529546.shtml# RSA&#xff1a; 是公开密钥系统的代表&#xff1b; 安全性&…

判断Linux系统是32位还是64位

方法1&#xff1a; 执行以下命令&#xff1a; --------------------------- $ getconf LONG_BIT --------------------------- 如果输出32即为32位系统&#xff0c;输出64即为64位系统 方法2&#xff1a; 执行以下命令&#xff1a; --------------------------- $ unam…

opencv中关于直方图的相关函数

直方图   CvHistogram 多维直方图 typedef struct CvHistogram { int header_size; CvHistType type; int flags; int c_dims; int dims[CV_HIST_MAX_DIM]; int mdims[CV_HIST_MAX_DIM]; float* thresh[CV_HIST_MAX_DIM]; float* array; struct CvNode* root; CvSet* …

pthread_create如何传递两个参数以上的参数

涉及多参数传递给线程的&#xff0c;都需要使用结构体将参数封装后&#xff0c;将结构体指针传给线程 定义一个结构体 struct mypara { var para1;//参数1 var para2;//参数2 } 将这个结构体指针&#xff0c;作为void *形参的实际参数传递 struct mypara pstr…

Manifest 添加 FileProvider 报错:Manifest merger failed with multiple errors, see logs

报错&#xff1a; Error:Execution failed for task :app:processDebugManifest. > Manifest merger failed with multiple errors, see logs 代码&#xff1a; <providerandroid:name"android.support.v4.content.FileProvider"android:authorities"al…

图像变换 - 图像拉伸、收缩、扭曲、旋转 - 透视变换(cvWarpPerspective)

透视变换&#xff08;单应性&#xff1f;&#xff09;能提供更大的灵活性&#xff0c;但是一个透视投影并不是线性变换&#xff0c;因此所采用的映射矩阵是3*3&#xff0c;且控点变为4个&#xff0c;其他方面与仿射变换完全类似&#xff0c;下面的例程是针对密集变换&#xff0…

Manifest merger failed with multiple errors, see logs 怎么查看日志

在android开发的时候,有时候会遇到这样的问题 Error:Execution failed for task :test:processDebugManifest.> Manifest merger failed with multiple errors, see logs 但是要命的是,除了这个log,没有什么其他的有用信息了,怎么办? 处理方式是这样的: 首先进入命令行,…

jQuery操作select option

jQuery获取Select选择的Text和Value:1. var checkTextjQuery("#select_id").find("option:selected").text(); //获取Select选择的Text2. var checkValuejQuery("#select_id").val(); //获取Select选择的option Value3. var checkIndexjQuer…