當前位置:首頁 » 圖片資訊 » 如何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結構