opencv
不同模块的功能
- opencv_core :包含库的核心功能
cv::flip();
- opencv_imgproc: 主要的图像处理函数
- opencv_highgui:读写图像和视频函数、用户交互函数
cv::namedWindow();
cv::imshow();
cv::waitKey();
#直接读取灰色图 提高运行速度并减少内存使用
#灰度图直接读取彩色图,三通道值相同 cv_8U --->cv_8UC3
cv::imread("",cv::IMREAD_GRAYSCALE);
cv::imwrite();
-
cv::viz : 用于在三维环境下展示场景目标和相机
编译opencv前需要安装VTK
opencv-python
标签绘制
color = [int(c) for c in COLORS[classIDs[i]]]
cv2.rectangle(img, (x1, y1), (x1 + w, y1 + h), color, 2)
text = '{}: {:.3f}'.format(LABELS[classIDs[i]], confidences[i])
#计算文本字符的宽、高
#参数:文本信息、字体、字体大小、线的粗细
#返回文本框大小、基线(最下方文本的y坐标)
(text_w, text_h), baseline = cv2.getTextSize(text, cv2.FONT_HERSHEY_SIMPLEX, 0.5, 2)
cv2.rectangle(img, (x1, y1 - text_h - baseline), (x1 + text_w, y1), color, -1)
cv2.putText(img, text, (x1, y1 - 5), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 0, 0), 2)
操作像素
-
图像以值传递的方式进行拷贝时,仍共享同一块图像数据(一荣俱荣)
//深拷贝方式 image.copyTo(img); cv::Mat img = image.clone;
-
像素点—8位无符号数(通常)
-
16位通道-----医学图像
//c++ 随机生成器
std::default_random_engine generator;
//使用at方法访问元素时需指定图像元素类型(模板方法)
image.at<uchar>(j,i) = value; //灰度图
image.at<cv::Vec3b>(j,i)[channel] = value;//彩色图 值
image.at<cv::Vec3b>(j,i) = cv::Vec3b(value,value,value)//向量
cv::Mat_(模板子类)
//使用Mat模板直接访问元素 与at效果一致但更简洁
cv::Mat_<uchar> img(image);
img(row,col) = value;
指针扫描图像
- 行数是某个数字的整数倍时,图像处理性能会提高
- 减色银子为2的指数时,使用位移运算符代码效率很高
- 使用指针扫描图像缓冲区
减色函数
void colorReduce(cv::Mat image, int div = 64){
int nl = image.rows;
int nc = image.cols * image.channels();
for(int j = 0 ; j < nl ; ++j){
uchar* data = image.ptr<uchar>(j);
for(int i = 0;i < nc;&