- 图像的IO操作
绘制直线
// img:要绘制的图像
// start,end:直线的起点和终点
// color:线条的颜色
// thickness:线条的宽度
cv.line(img,start,end,color,thickness);
绘制圆形
// img:要绘制的图像 // centerpoint,r:圆心和半径 // color:线条的颜色 // thickness:线条的宽度,为-1时生成闭合图案并填充颜色 cv.circle(img,centerpoint,r,color,thickness);
绘制矩形
// img:要绘制的图像 // leftupper,rightdown:矩形的左上角和右下角坐标 // color:线条的颜色 // thickness:线条的宽度 cv.rectangle(img,leftupper,rightdown,color,thickness)
向图像中添加文字
// img:要绘制的图像 // text:要写入的文本数据 // station:文本放置的位置 // font:字体 // fontsize:字体大小 // color:颜色 // thickness:宽度 // cv.LINE_AA:线性写入 cv.putText(img,text,station,font,fontsize,color,thickness,cv.LINE_AA)
创建图像
img = np.zeros((512,512,3),np.uint8) // 创建一个512*512的图像,3波段(BGR三通道),无符号整型的格式
代码示例
获取并修改图像中的像素点
// 获取某个像素点的值 px = img[100,100] // 仅获取蓝色通道的强度值 blue = img[100,100,0] //最后的0表示BGR的B // 修改某个位置的像素值 img[100,100] = (255,255,255)
获取图像的属性
img.shape // 图像的形状 => (256,256,3) // 256row,256column,3通道 img.size // 图像的大小,表示共有多少个像素 => 256*256*3得到的像素数量 img.dtype // 图像的类型 => dtype('uint8') // uint8类型
图像通道的拆分与合并
// 通道拆分 b,g,r = cv.split(img); // 通道合并 img = cv.merge((b,g,r)); // 获得彩色图像
色彩通道的改变
// input_img:进行转换的图像 // flag:转化类型 => COLOR_BGR2GRAY: BGR -> GRAY COLOR_BGR2HSV: BGR -> HSV cv.cvtColor(input_img,flag);
图像的加法
cv.add(img1,img2); => // 要合并的两张图像
图像的混合
cv.addWeighted(img1,0.7,img2,0.3,0) // 比例为7:3
图像缩放 ```cpp // src:输入图像 // dsize:绝对尺寸,指定调整后图像大小 // fx,fy:相对尺寸,将dsize设置为None,然后将fx和fy设置为比例因子即可 // interpolation:插值方法 / * 插值:
INTER_LINEAR => 双线性插值法 INTER_NEAREST => 最近邻插值 INTER_AREA => 像素区域重采样(默认) INTER_CUBIC => 双三次插值
*/ cv.resize(src,dsize,fx=0,fy=0,interpolation = cv2.INTER_LINEAR);
// example: // rows,cols = kids.shape[:2]; // res = cv.resize(src,(2 cols,2 rows)) => 绝对坐标放大 // res = cv.resize(src,None,fx = 0.5,fy = 0.5) => 相对坐标缩小
- **图像的平移**
```cpp
// 参数
// img:输入的图像
// M: 2*3的移动矩阵 => 对于(x,y)处的像素点,要把它移动到(x + x1,y + y1)处时,M矩阵如下图。M设置为np.float32类型的Numpy数组就可以了
// dsize:输出图像的大小
// 注意,输出图像的大小,应该是(宽,高)的形式。width = 列数,height = 行数
cv,warpAffine(img,M,dsize);
// example
// M = np.float32([[1,0,100],[0,1,50]]); => 平移矩阵(创建一个矩阵,两个数组分别为X,Y)
// dst = cv.warpAffine(img,M,(cols,rows));
- 图像的旋转
// 1、先获取旋转矩阵 // 参数 // center: 旋转中心 // angle: 旋转角度 // scale: 缩放比例 cv.getRotationMatrix2D(center,angle,sacle); // => 返回旋转矩阵M // 2、调用cv.warpAffine完成图像的旋转 // 示例: // ros,cols = img,shape[:2]; // M = cv.getRotationMatrix2D((cols/2,rows/2),90,1); // dst = cv.warpAffine(img,M,(cols,rows));