opencv的img.flat的函数用法

opencv的img.flat的函数用法,第1张

Mat类:

是用于保存图像以及其他矩阵数据的数据结构。

图像载入函数imread():

Mat imread(const string& filename, int flags=1);

filename表示图像载入的路径;

flags为载入标识。

flags=0 将图像转换为灰度再返回;

flags=1 将图像转换成彩色再返回;

flags=2 若载入图像的深度是16位或者32位,就返回对应的图像深度,否则,将图像转换为8位图像再返回。

flags=2|4 载入最真实无损的源图像

若flags不在枚举类型当中,flags>0 返回一个三通道的彩色图像;flags=0 返回灰度图像;flags<0 返回包含Alpha通道的加载图像。

图像显示函数imshow():

void imshow(const string& winname, InputArray mat);

winname填写要显示的窗口标识名称;

mat填需要显示的图像。

输出图像到文件imwrite():

bool imwrite(const string& filename, InputArray img, const vector& params=vector());

第一个参数filename表示要写入的文件名

第二个参数img表示Mat类型的图像数据

通道分离split()函数;

void split(const Mat& src, Mat mvbegin);

void split(InputArray m, OutputArrayofArray mv);

第一个参数表示需要进行分离的多通道数组;

第二个参数表示函数 输出数组或输出的vector容器。

通道合并merge()函数:

void merge(const Mat mv, size_t count, OutputArray dst)

void merge(InputArrayOfArray mv, OutputArray dst);

第一个参数mv表示需要被合并的输入矩阵或vector容器的阵列,mv参数中所有矩阵必须拥有一样的尺寸;

第二个参数count表示当mv为空白的C数组时,代表输入矩阵的个数,通常可以省略不写;

第三个参数dst表示输出矩阵,和mv拥有一样的尺寸和深度

Python与OpenCV图像简单 *** 作

文章目录

OpenCV安装

1读取

2保存

3截取部分图像

4翻转

5缩放

6转换为灰度图像

7在一个窗口中显示两张

8绘图功能

OpenCV安装

打开命令行输入 pip install opencv-python(前提是有python环境)

1读取

使用 cv2imread() 函数,给出了几种读取路径的写法

import cv2#导入opencv包

#python中不需要声明变量

img1 = cv2imread("D:/test/1jpg")#绝对路径,推荐

img2 = cv2imread("D:\\test\\2jpg")#通常是两个斜线,单右斜线会被当成转义符

img3 = cv2imread("3jpeg")#相对路径,将放在py文件对应目录下

cv2imshow("test1", img1)

cv2imshow("test2", img2)

cv2imshow("test3", img3)

cv2waitKey(0)#没有这一句会一闪而过

##waitkey(delay=0),等待用户输入按键,返回该按键的值

2保存

使用 cv2write() 函数保存

import cv2# 导入OpenCV包

img=cv2imread("D:/test/3png",cv2IMREAD_COLOR)

cv2imshow("test",img)#OpenCV可以实现不同格式转换,支持jpg、bmp、png等格式相互无损转换

cv2imwrite("D:/test/31png",img)#将改变后的图像保存

cv2imwrite("D:/test/32bmp",img)

cv2waitKey(0)

3截取部分图像

import cv2

img = cv2imread("D:\\test\\2jpg")

frame = img[200:400,200:400] #截取部分图像,200-400行,200-400列

cv2imshow("test",frame)#显示截取后的图像

cv2waitKey(0)

4翻转

使用cv2flip(img,flipcode)来进行翻转

flipcode控制翻转方向

import cv2

img=cv2imread("D:/test/5jpg",cv2IMREAD_COLOR)

flipCode1=1#大于0左右翻转

flipCode2=0#等于0上下翻转

flipCode3=-1#小于0先上下翻转再左右翻转

img1 = cv2flip(img, flipCode1)#filpCode控制翻转方向

img2 = cv2flip(img, flipCode2)

img3 = cv2flip(img, flipCode3)

cv2imshow("test",img)

cv2imshow("test1",img1)

cv2imshow("test2",img2)

cv2imshow("test3",img3)

cv2waitKey(0)

5缩放

cv2resize(img,dsize,fx,fy),dsize和fx,fy都可以设置大小,不能同时为0

import cv2# 导入OpenCV包

img = cv2imread("D:/test/2jpg",cv2IMREAD_COLOR)

img1 = cv2resize(img, (700, 700))#设置输出的尺寸

img2 = cv2resize(img, None, fx=07, fy=07)#None的位置本来是输出的尺寸,这里设置了缩放因子

#fx-水平轴上的比例因子,fy-垂直轴上的比例因子

cv2imshow("test", img)

cv2imshow("test1", img1)

cv2imshow("test2", img2)

cv2imwrite("D:/test/resizejpg", img1)# 保存图像

cv2waitKey(0)

6转换为灰度图像

cv2cvtColor(img, cv2COLOR_RGB2GRAY)

cv2COLOR_RGB2GRAY表示把RGB图像转为灰度图像,2前是转换前,2后是转换后

import cv2#导入opencv包

#python中不需要声明变量

img = cv2imread("D:/test/1jpg")#cv2imread读进来的格式是BGR(W,H,C),而不是RGB

cv2imshow("BGR", img)

#将图像转换为RGB格式

img1 = cv2cvtColor(img, cv2COLOR_BGR2RGB)#因为opencv读取是按BGR读的,所以转换为RGB反而不像原图

cv2imshow("RGB",img1)

#将图像转换为灰度图像

img2 = cv2cvtColor(img1, cv2COLOR_RGB2GRAY)

cv2imshow("GRAY",img2)

cv2waitKey(0)

7在一个窗口中显示两张

import cv2

import numpy as np

img = cv2imread("D:/test/resizejpg")

img2 = cv2imread("D:/test/resizejpg")

#imgs = nphstack([img,img2])#在水平方向上平铺

imgs = npvstack([img,img2])#在竖直方向上堆叠

cv2imshow("mutil_pic", imgs)

cv2waitKey(0)

8绘图功能

import cv2

import numpy as np

img = 255npones((350,512,3),npuint8)#unit8:0~255

#ones()为创建一个元素均为一的矩阵

font = cv2FONT_HERSHEY_DUPLEX

#font = cv2FONT_HERSHEY_COMPLEX# 设置字体

#文本 # 对象、文本、 位置、 字体、字体大小、颜色、 字体粗细

cv2putText(img, "happy day", (50,300), font, 08, (25, 25, 25), 2,)#颜色可以自己调整,范围为0-255

#线 #起点 终点 颜色 粗细

cv2line(img, (50,310), (185,310), (0, 0,0),4)

#矩形 #左上顶点 右下顶点

cv2rectangle(img, (80,8), (200,100), (0, 255,0),2)

#圆形 #圆心 半径 颜色 控制是否填充 -1表示填充

cv2circle(img,(60,60),30,(0,0,213),1)

#椭圆 #中心点 长轴 短轴 偏转角度,起始角度,终止角度

cv2ellipse(img,(100,300),(100,50),180,0,360,(20,213,79),1)

cv2imshow("Draw", img)

cv2waitKey(0)

1npvstack([img1,img2]) 当img1和img2矩阵维度相同时才能堆叠

2除了imread,imwrite 函数没有返回值以外,flip,resize,cvtColor,vstack,hstack都有返回一个回来。

参考如下:

用vc6新建一个win32控制台程序;

/

功能:实现加载jpg,并进行缩放显示

开发环境: winXP + vc6 + openCV10

头文件路径:

D:\opensource\opencv10\cv\include

D:\opensource\opencv10\cxcore\include

D:\opensource\opencv10\otherlibs\highgui

lib文件目录:

D:\opensource\opencv10\lib

用到的lib文件: cxcorelib cvlib highguilib

/

#include <stdioh>

#include <cvh>

#include <highguih>

#include <mathh>

int main(int argc, char argv[])

{

const char imgName[] = {"源图像", "缩放后图像"};

IplImage src = 0; //源图像指针

IplImage dst = 0; //目标图像指针

float scale = 05f; //缩放倍数为0618倍

CvSize dst_cvsize; //目标图像尺寸

if ( argc == 2 && (src = cvLoadImage(argv[1], CV_LOAD_IMAGE_UNCHANGED)) != 0 )

{

}

else

{

src = cvLoadImage("3jpg", CV_LOAD_IMAGE_UNCHANGED);

if(!src)

{

printf("Load source image failed, please check!\n");

return -1;

}

}

dst_cvsizewidth = (int)(src->width scale); //目标图像的宽为源图象宽的scale倍

dst_cvsizeheight = (int)(src->height scale); //目标图像的高为源图象高的scale倍

dst = cvCreateImage( dst_cvsize, src->depth, src->nChannels); //构造目标图象

// cvResize(src, dst, CV_INTER_LINEAR); //缩放源图像到目标图像

cvResize(src, dst, CV_INTER_CUBIC); //缩放源图像到目标图像

cvNamedWindow(imgName[0], CV_WINDOW_AUTOSIZE); //创建用于显示源图像的窗口

cvNamedWindow(imgName[1], CV_WINDOW_AUTOSIZE); //创建用于显示目标图像的窗口

cvShowImage(imgName[0], src); //显示源图像

cvShowImage(imgName[1], dst); //显示目标图像

cvWaitKey(-1); //等待用户响应

cvReleaseImage(&src); //释放源图像占用的内存

cvReleaseImage(&dst); //释放目标图像占用的内存

cvDestroyWindow(imgName[0]);

cvDestroyWindow(imgName[1]);

return 0;

}

刚自己简单试了下,编了个长宽各缩小一半和放大一倍的小程序。缩放整数倍应该是比较简单的。

具体思路就是:

缩小:就把原图相邻四个像素点合成一个像素点填充到缩小后的图像中,合成的方式可以是任取其一、取平均值、取最大值或者最小值等等,具体方法自己选择,我用的方法是选择左上角的那个像素点,因为比较简单。

放大:相反,把原图的一个像素点的像素值填充到放大后图像的四个像素格里面去。

用at()函数 *** 作像素还算简单。

至于不是整数倍的缩放,没有深入研究,暂时不知道怎么做。

以上就是关于opencv的img.flat的函数用法全部的内容,包括:opencv的img.flat的函数用法、openCV代码在vc++中实现图片缩放功能、用opencv写一个图像缩放的程序,不要调用现有的函数,自己用算法写等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9799165.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-02
下一篇2023-05-02

发表评论

登录后才能评论

评论列表(0条)

    保存