opencv图像常用命令(一)

1、vector a声明了一个int数组a[],大小没有指定,可以动态的向里面添加删除。
Vec<uchar, 3>定义一个uchar类型的数组,长度为3而已。
、定义8U和float的3通道向量。如:Vec3b color; //用 color 变量描述一种 RGB 颜色
color[0]=255; //0通道的B 分量
color[1]=0; //1通道的G 分量
color[2]=0; //2通道的R 分量

2、img.at(14,25) [0]= 25;Mat img(3, 3, CV_8UC3)创建3*3 8uchar3通道的图像。
Mat mask(img.rows, img.cols,CV_8UC3, Scalar(0, 0,0 ));
if (img.empty())如果图像不空。
img.rows;img.cols;img.channels,img.data.
imshow(“窗口名字”,img).
void func(Mat&),主函数中,func(img)。
img.depth()返回图像深度,如CV_8U、CV_32F等。
img.convertTo(fp,CV_32F)改变图像的深度,将img变为32位深度,并付给fp。

3、函数ptr,返回图像特定行的指针,因此可以得到每一行的数据,时间复杂度降低,
uchar R,G,B;
for (int i=0;i<img.rows;i++) //遍历行
Vec3b pixRow=img.ptr(i);
for (int j=0;j<img.cols;j++) { //遍历
B=pixRow[j][0];
G=pixRow[j][1];
R=pixRow[j][2];
}

4、addWeighted(InputArray src1, double alpha, InputArray src2, double beta, OutputArray dst, int dtype=-1)
将dst=src1alpha+src2beta。
bitwise_and(InputArray src1, InputArray src2, OutputArray dst)
dst=src1和src2的位与操作。

5、定义一个二维点
Point pt;
pt.x = 10;
pt.y = 8;
Point pt = Point(10, 8);

6、RNG rng;产生一个随机数
double a1 = rng.uniform((double)0, (double)1);
double b = rng.uniform(0.f, 1.f);

7、【打开Visual Studio】→【新建项目】→【Win32控制台应用项目(修改名称后点确定)】→【下一步】→【空项目(勾起来以后点击确认)】→【解决方案资源管理器】→【源文件】→【新建项】→【添加】→【(修改名称后点击确定)】

8、Mat element = getStructuringElement(MORPH_RECT, Size(15, 15));定义15*15 的结构元素
Mat dstimg;
erode(img, eroimg, element);用element对img腐蚀操作后,付给eroimg.
dilate(img, dilimg, element);膨胀
其中,矩形:MORPH_RECT;交叉形:MORPH_CROSS;椭圆形:MORPH_ELLIPSE

9、blur(img, blurimg, Size(7, 7));均值滤波

10、Mat img2;
img2.create(img.size(), img.type())
Mat img2 = Mat::zeros(img.rows, img.cols, CV_8UC3);
cvtColor(img, grayImage, COLOR_BGR2GRAY)将img转为灰度图
cvtcolor()函数是一个颜色空间转换函数,可以实现RGB颜色向HSV,HSI等颜色空间转换。也可以转换为灰度图

11、blur(grayImage, edge, Size(3, 3));
Canny(edge, edge, 3, 9, 3);Canny边缘检测

12、有很多机器学习算法Ml可以调用,
using namespace cv::ml
Ptr svm = SVM::create();
svm->setType(SVM::C_SVC);
svm->setKernel(SVM::LINEAR);
svm->setTermCriteria(TermCriteria(TermCriteria::MAX_ITER, 100, 1e-6));
svm->train(Mat, ROW_SAMPLE, label);

13、IpIImage * cvCreateImage(cvSize size, int depth, int channels);分配

14、void Vvalue(Mat* src)
void Variance(Mat& src)
两种方式都没有copy,只是调用方式不一样:
第一种调用:Vvalue(&src)并且src->at(i, j)
第二种调用:Variance(src)并且src.at(i, j)

15、为什么要用指针,尤其在参数传入时?数据需要分配地址存储时(数据较大或者重要),可以使用指针,而过度参数(图像宽高)不用

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值