OpenCV cheatsheet
作者:互联网
OpenCV cheatsheet
构造
生成随机矩阵
Mat m(100,200,CV_8U);
randu(m,0,255); // 用0~255中的随机数填充m
打开摄像头
请使用opencv > 3.3.1.11版本
while True:
ret, frame = cap.read()
cv2.imshow('frame', frame) # 一个窗口用以显示原视频
if cv2.waitKey(1) & 0xFF == ord('q'):
break
画
矩形
cv2.rectangle(image,x,y,x+width,y+height,(b,g,r),linewidth)
类型
opencv中给出了很多种表示类型的方法,比如在cv::Mat
的构造函数中
cv::Mat m(100,100,CV_8U3);
就给出了一个3 channel的unchar
数组,此处的CV_8U3其实是CV中define的一个整数
作为模板的参数,则不可使用,如果用模板构造一个一样的矩阵,应该是
cv::Mat_<Vec3b> m(100,100);
初始化
可以使用赋值对一些array进行初始化,向量可以用{a,b,c}初始化,点可以用{a,b}初始化,数组可以用常值初始化
计时
double t = (double)cv::getTickCount();
/*
some code
*/
t = ((double)cv::getTickCount()-t)/cv::getTickFrequency();
仿射变换
img = cv2.warpAffine(img, W, img.shape[:2])
其中W是一个2*3的矩阵(即默认第三行是0,0,1),如果要单纯进行旋转,可以通过
W = cv2.getRotationMatrix2D(origin, 30,1)
来得到W
透明mask
用dst=cv2.addWeighted(src1,alpha,src2,beta,gamma)
dst = src1alpha + src2beta + gamma;
分割通道
Mat aChannels[3];
split(img, aChannels);
取某一区域
Rect rect(50,20, 200, 50);
Mat ROI = img(rect);
0~1和uint8转换
for(int i =0;i<rows;i++){
for(int j = 0;j<cols;j++){
imgGrayF32(i,j) = imgGray(i,j)/255.;
}
}
尽管Mat.convertTo可以进行转化,但是转换后的图imshow全白不知道怎么回事
但是反过来想把F32转成u8却可以
取多通道图片的元素
正确做法
cout<<img(i,j)(k) <<endl;
错误做法
cout<<img(i,j,k) <<endl;
错误
[1] 6356 segmentation fault (core dumped)
可能由于没有给Mat指定大小而访问导致
标签:初始化,Mat,img,cv2,OpenCV,cheatsheet,100,cv 来源: https://blog.csdn.net/luo3300612/article/details/88432319