当前位置:首页 » 图片资讯 » 如何opencv读取图片
扩展阅读
美女健身跳河视频 2023-08-31 22:08:21
西方贵族美女照片真人 2023-08-31 22:08:15

如何opencv读取图片

发布时间: 2022-12-10 09:16:45

Ⅰ opencv如何一次性读入大量图片

简单的字符串操作就能完成你要的工作。比如,你的图片是001至100,则你只需要制作一个字符串char c[128],来表示你的文件名就可。字符串初始为空。然后用sprintf(c,"%d",100)就能把100写到c中。然后用strcat(c,".jpg")就可以把c变为100.jpg。然后你把上面cvLoadImage的参数改成c就行了。
当然,如果你的文件名是1-100,这个方法很好用。如果是001-100,就是标准三位数,你就麻烦了。你可以用一些字符串转换的办法。比如,设a为临时字符串,初始为空,用strlen(c)读取c的长度,然后用strcat(a,"0")来给a添加前面的0,再把两个字符串衔接,用strcat(a,c)和strcat(a,".jpg")完成处理。这是笨办法,但是字符串操作确实基础功底。

Ⅱ opencv中怎么样读取图像的部分图像

OpenCV中用于读取图像像素点的值的方法很多,这里主要提供了两种常用的方法。

方法一

利用IplImage数据类型的imageData定位数据缓冲区来实现,imageData包含指向图像第一个像素数据的指针

例:

If( imgSource != 0 )//imgSource为IplImage*

{

for ( int i = 0; i < imgSource->height; ++i )

{

uchar * pucPixel = (uchar*)imgSource->imageData + i*imgSource->widthStep;

for ( int j = 0; j < imgSource->width; ++j )

{

pucPixel[3*j] = 0;//像素第一个通道的值

pucPixel[3*j + 1] = 0;//像素第二个通道的值

pucPixel[3*j + 2] = 0;//像素第三个通道的值

}

}

}

方法二

利用OpenCV提供的GetReal*D,SetReal*D和Get*D,Set*D,这里*为2,对于单通道图像可以使用前两个函数,对于多通道图像可以使用后两个函数

例:

If( imgSource != 0 )//imgSource为IplImage*

{

for ( int i = 0; i < imgSource->height; ++i )

for ( int j = 0; j < imgSource->width; ++j )

{

//获取(i, j)处的三通道图像像素值

CvScalar scaPixelVal = cvGet2D( imgSource, i, j );

//获取(i, j)处的单道图像像素值

double dPixelVal = cvGetReal2D( imgSource, i, j );

//设定(i, j)处的三通道图像像素值

cvSet2D( imgSource, i, j, scalPixelVal );

//设定(i, j)处的单通道图像像素值

cvSetReal2D( imgSource, i, j, dPixelVal );

}

}

Ⅲ opencv如何读入图片

1、首先新建一个VC++控制台项目如下图所示。本文项目名称helloOpenCV。

4、在主文件中添加如下代码:

#include "stdafx.h"

#include <opencv2/opencv.hpp>

using namespace std;
using namespace cv;

int main(int argc, char* argv[])
{
const char* imagename = "emosue.jpg";

//从文件中读入图像
Mat img = imread(imagename);

//如果读入图像失败
if(img.empty())
{
fprintf(stderr, "Can not load image %s ", imagename);
return -1;
}

//显示图像
imshow("image", img);

//此函数等待按键,按键盘任意键就返回
waitKey();

return 0;

Ⅳ 读取图片

python基础——读取图片

图像后缀名的转换:

要注意的是:对于彩色图像,不管其格式是png,还是bmp,或者jpg,

在PIL中 ,使用Image模块的open()函数打开后,返回的图像对象的模式都是 RGB ,对于灰度图像,不管其图像格式是PNG,还是BMP,JPG,打开后,其模式为灰度L。

PNG BMP JPG彩色图像格式之间的转换:可以通过Image模块的open函数和save函数,具体来说,在打开这些图像时,PIL会将他们解码成三通道的RGB图像。用户可以基于RGB进行处理。处理完毕后可以将其处理结果保存成PNG BMP JPG中任何格式。

PNG BMP JPG灰度图像格式之间的转换,同理也可以通过类似途径,只是解码后时模式为L的图像。

python库可以用来读取图片的库

1. PIL.Image.open  

无论是jpg还是png都能准确读取,PIL.Image.open 不直接返回numpy对象,可以用numpy提供的函数进行转换;

其他模块都直接返回numpy.ndarray对象,通道顺序为RGB,通道值得默认范围为0-255。

拓展:

利用PIL中的Image函数读取出来不是array格式,这时候需要用np.asarray() 或者np.array()函数 。

区别:np.array() 是深拷贝,np.asarray() 是浅拷贝

关于深拷贝和浅拷贝,这里给出一个说明:

Python 中的对象之间赋值时是按引用传递的,如果需要拷贝对象,需要使用标准库中的模块。

1. . 浅拷贝 只拷贝父对象,不会拷贝对象的内部的子对象。

2. .deep 深拷贝 拷贝对象及其子对象

一个很好的例子:

2. cv2.imread

使用opencv读取图像,直接返回numpy.ndarray 对象,通道顺序为BGR ,注意是BGR,通道值默认范围0-255

cv2.imread():读入图片,共两个参数:第一个参数为要读入的图片文件名,第二个参数为如何读取图片(cv2.IMREAD_COLOR:读入一副彩色图片;cv2.IMREAD_GRAYSCALE:灰度图片;cv2.IMREAD_UNCHANGED:读入一幅图片,并包括其alpha通道。)

cv2.imread()不能有中文路径,否则读取不出来

cv2.imread() 读出来同样是array形式,但是如果是单通道的图,读出来的是三通道的。

3. matplotlib.image.imread

用于显示图片matplotlib 用于读取图片并且读取出来就是array格式

解决使用plt.savefig 保存图片时一片空白 : 在plt.show() 之前调用 plt.savefig();

4. scipy.ndimage.imread

scipy.ndimage.imread(*args, **kwds)   Use ``matplotlib.pyplot.imread`` instead.

 Returns:imread:ndarray(多维数组)

5. scipy.misc.imread

scipy.misc.imread(name, flatten=False, mode=None)

Use ``imageio.imread`` instead.

返回:imread: ndarray。通过读取图像获得的阵列 。读出来是array 形式,并且按照(H,W,C)形式保存

4. skimage.io.imread

scikit-image和numpy,matplotlib,scikit-learn等包都是Scipy项目的成员,通用numpy数组作为基本数据格式。在python中载入包名为skimage:所得即为numpy数组。

io.imread读出图片格式是uint8(unsigned int);value是numpy array;图像数据是以RGB的格式进行存储的,通道值默认范围0-255。

Ⅳ 如何opencv读取摄像头并保存每一帧图像

#include\x0d\x0a#include\x0d\x0a#include\x0d\x0aintmain()\x0d\x0a{\x0d\x0aCvCapture*capture=cvCreateCameraCapture(0);\x0d\x0acvNamedWindow("camera",CV_WINDOW_AUTOSIZE);\x0d\x0aIplImage*image;\x0d\x0acharfile_name[15];\x0d\x0ainti;\x0d\x0awhile(1)\x0d\x0a{\x0d\x0afor(i=0;i<99999;i++)\x0d\x0a{\x0d\x0aimage=cvQueryFrame(capture);\x0d\x0aif(!image)\x0d\x0abreak;\x0d\x0acvShowImage("camera",image);\x0d\x0acharc=cvWaitKey(20);\x0d\x0aif(c==27)\x0d\x0a{\x0d\x0acvReleaseCapture(&capture);\x0d\x0acvDestroyWindow("hh");\x0d\x0aexit(0);\x0d\x0a}//按esc退出\x0d\x0a\x0d\x0asprintf(file_name,"d:\\%05d.jpg",i);//d盘根目录下生成\x0d\x0acvSaveImage(file_name,image);\x0d\x0a\x0d\x0a}\x0d\x0aMessage(NULL,"文件名超出范围!","警告!",MB_OK);\x0d\x0a\x0d\x0a}\x0d\x0a\x0d\x0a}\x0d\x0a供参考。

Ⅵ opencv如何读取一张图片并用字符串的形势存储

cvloadimage以后存的数据都是char型的。图片数据在8位RGB格式下每个像素值只能是0~255,所以每一位存的都是char,你看opencv 的IplImage数据结构里面的Imagedata就是char*型的。你要是要把数据存成字符串形势的话直接把想要存的部分ImageData[i*col+j]保存到对应的格式文件里就可以了。
建议多看看opencv里的参考手册,还是很详细很方便的。这样说不知道你是否已经明白。有问题可继续询问

Ⅶ opencv如何批量读取文件夹中图片

Opencv读取文件夹连续图片,RGB分量显示,图像灰度化
1.读取文件夹连续图片
刚开始学习图像处理,开始只能一次读入一张图片,今天从网上查了一些资料,自己写了一个可以连续读取多张图片函数。
char filename[100];
char windowname[100];
IplImage* pScr;
unsigned char *Readfigsmethod1(int num)// 读入num个图片
{
for(int i=1;i<=num;i++)
{
sprintf(filename,"D:/test/%d.jpg",i);// 将图片以数字命名:例如1.jpg 2.jpg等,放入D:/test/文件夹下
sprintf(windowname,"window%d.jpg",i);
pScr=cvLoadImage(filename,1);//导入图片
cvNamedWindow(windowname,CV_WINDOW_AUTOSIZE);
cvShowImage(windowname,pScr);//显示图片
//cvWaitKey(0);

}
cvWaitKey(0);
cvReleaseImage(&pScr);//释放图片
cvDestroyAllWindows();//销毁窗口

return 0;
}

注释:连续读取图片主要问题在于filename指向图片目录, sprintf(filename,"D:/test/%d.jpg",i)的使用可以使得filename可以从1.jpg,2.jpg,一直到num.jpg. filename=D:/test/i.jpg.
2.RGB分量显示,图像灰度化
// RGBSPLIT.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
//#include "afx.h"
#include "cv.h"
#include "highgui.h"
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
char filename[100];
char filename1[100];
char windowname[100];
IplImage* pScr;
IplImage *img1;
IplImage *img=0;
IplImage *img_red=0;
IplImage *img_green=0;
IplImage *img_blue=0;
unsigned char *Readfigsmethod1(int num);//实现连续读取图片的函数
unsigned char *RGBsplit(IplImage *img);//实现RGB量分开显示的函数
unsigned char *RGBtoGray(IplImage *img);//实现灰度化函数
int main(int argc, char *argv[])
{

img=cvLoadImage("D:\\test\\1.jpg");
cvNamedWindow("lena",CV_WINDOW_AUTOSIZE);//创建窗口,窗口名字lena
cvShowImage("lena",img);//载入转化后的图像
RGBsplit(img);//调用RGB分开显示函数,若想实现其他功能,在此处调用其他函数即可。但是显示后cvReleaseImage()中相应参数要更改成显示的对象。
cvWaitKey(0);
cvReleaseImage(&img);
cvReleaseImage(&img_red);
cvDestroyAllWindows();

return 0;
}
unsigned char *Readfigsmethod1(int num)
{
for(int i=1;i<=num;i++)
{
sprintf(filename,"D:/test/%d.jpg",i);
sprintf(windowname,"window%d.jpg",i);
pScr=cvLoadImage(filename,1);
cvNamedWindow(windowname,CV_WINDOW_AUTOSIZE);
cvShowImage(windowname,pScr);
//cvWaitKey(0);

}
cvWaitKey(0);
cvReleaseImage(&pScr);
cvDestroyAllWindows();

return 0;
}
unsigned char *RGBtoGray(IplImage *img)
{

img1 = cvCreateImage(cvGetSize(img),IPL_DEPTH_8U,1);
//色彩空间转换,将源彩色图像img转化成目标灰色图像imag1
cvCvtColor(img,img1,CV_BGR2GRAY); //关键
cvNamedWindow("GrayImage",CV_WINDOW_AUTOSIZE);//创建窗口,窗口名字GrayImage
cvShowImage("GrayImage",img1);//载入转化后的图像

return 0;
}
unsigned char *RGBsplit(IplImage *img)
{
//IplImage* imgeR,img_blue,imageG,imgGRAY;
int width=img->width;
int height=img->height;
int channel=img->nChannels;
int widthStep=img->widthStep;
int i,j;

img_red= cvCreateImage(cvGetSize(img),IPL_DEPTH_8U,3);
img_green= cvCreateImage(cvGetSize(img),IPL_DEPTH_8U,3);
img_blue= cvCreateImage(cvGetSize(img),IPL_DEPTH_8U,3);
for (i=0;i<height;i++)
{

for (j=0;j<width;j++)
{
CvScalar t=cvGet2D(img,i,j);
double s0=t.val[0];
double s1=t.val[1];
double s2=t.val[2];
CvScalar m_blue=cvScalar(s0,0,0,0);
CvScalar m_green=cvScalar(0,s1,0,0);
CvScalar m_red=cvScalar(0,0,s2,0);
cvSet2D(img_blue,i,j,m_blue);
cvSet2D(img_green,i,j,m_green);
cvSet2D(img_red,i,j,m_red);
}
}
cvNamedWindow("imgred",1);
cvShowImage("imgred",img_red);
return 0;
}

Ⅷ opencv 读取图像

openCV读取图像可以使用cvImageload函数,至于要将图像中的人标出来时下一步的事情,sorry,本人不是很清楚

Ⅸ opencv和python下,对图片的读取程序报错如何解决

1、需要用到其他模块的函数,如:

for i in range(20) #循环次数

image=cv2.imread("D:\picture\%d.jpg"%(i))#路径自己选择。

2、可以先升级你的pip,另外看看你的版本是否匹配,包括py版本和32位64位。

3、关于python下使用opencv读取图像。首先需要导入opencv包,上面说的那个Ipython并没有opencv包,所以想使用的请先正确导入opencv包再说,至于怎么导入,先下载个opencv包,里面有关于python的opencv包。
以下照片是关于Ipython的运行界面:

Ⅹ 求助,opencv如何从内存读取图像数据

可以使用highgui模块下的decode相关函数,有c、c++和python的好几个版本。可以自由选用。其中imdecode中第一个参数inputarrybuf就是存储图像数据的内存首地址。函数的返回值就是opencv常用的Mat结构或者是cvMat结构