• Open Source Computer Vision Library

圖像文件讀入和顯示

Wikipedia,自由的百科全书

來自于仕琪的講稿《使用OpenCV進行圖像處理》中的常式

目錄

C語言版本

/***********************************************************************
 * OpenCV example
 * By Shiqi Yu 2006
 ***********************************************************************/
 
#include "cv.h"
#include "highgui.h"
 
int main( int argc, char** argv )
{
    IplImage* pImg; //聲明IplImage指針
 
    //載入圖像
    if( argc == 2 && 
        (pImg = cvLoadImage( argv[1], 1)) != 0 )//[[此處的argc==2是否需要改成argc==1?我改了之後才能運行成功。求大牛解惑]] //  wmzzzz : 在"屬性"|"debug"|里的command arguments 裡加入參數(一個路徑:要打開的文件路徑) 這時 argc==2 就合理了...可以試試多加幾個
    {
        cvNamedWindow( "Image", 1 );//創建視窗
        cvShowImage( "Image", pImg );//顯示圖像
 
        cvWaitKey(0); //等待按鍵
 
        cvDestroyWindow( "Image" );//銷毀視窗
        cvReleaseImage( &pImg ); //釋放圖像
        return 0;
    }
 
    return -1;
}

函數說明

cvLoadImage( filename, -1 ); 預設讀取圖像的原通道數

cvLoadImage( filename, 0 );強制轉化讀取圖像為灰度圖

cvLoadImage( filename, 1 );讀取彩色圖

論壇常見問題

  1. opencv在VC6.0環境下載入一幅圖片,為什麼視窗顯示總為整個屏幕顯示,且是圖像變形了?代碼應該沒有問題的,我是照著視頻資料上寫的,可就是運行後圖像顯示變形了。請哪位高手指點一下#include "stdafx.h"
  2. include "cv.h"
  3. include "highgui.h"
  4. include "cxcore.h"

int main(int argc, char* argv[]) { IplImage* src =cvLoadImage("E:\\1.JPG",,CV_LOAD_IMAGE_ANYDEPTH|CV_LOAD_IMAGE_ANYCOLOR); cvNamedWindow("win"); cvShowImage("win",src); cvWaitKey(0);

cvReleaseImage(&src); cvDestroyWindow("win");

return 0; }

如何顯示圖像的原始大小?

C++語言版本 based on OpenCV 2.1

/***********************************************************************
 * OpenCV 2.1 example
 * By Pebbler Chung 2010
 ***********************************************************************/
 
#include "cv.h"
#include "highgui.h"
 
using namespace cv; //下麵的所有cv相關類型不用加上首碼了
 
int main(int argc, char* argv[])
{
    Mat img = imread("lena.jpg"); //聲明Mat變數並調入lena的照片
 
    if(!img.data) //判斷圖片調入是否成功
         return -1; //調入圖片失敗則退出
    //創建視窗,並確定其為大小不可變類型視窗
    namedWindow("loveLena", CV_WINDOW_AUTOSIZE); 
 
    //顯示圖片。如果你不介意視窗大小可變,可以直接註釋掉上一句。因為imshow可以直接創建視窗
    imshow("loveLena", img);
 
    waitKey(); //等待按鍵
 
    return 0;
}

C++語言版本 based on OpenCV 2.3.1

/***********************************************************************
 * OpenCV 2.3.1 example
 * By Quarryman 2012
 ***********************************************************************/
#include "stdafx.h"
#include <string>
#include <opencv2\opencv.hpp>
 
using namespace cv;
using namespace std;
 
int main()
{
	string imagename = "lena.jpg";   //此處需要填寫絕對地址,我測試時使用相對地址出錯。
 
	//讀入圖像
	Mat img = imread(imagename);
 
	//如果讀入圖像失敗
	if(img.empty())
	{
		return -1;
	}
 
	//創建視窗
	namedWindow("image",1);
 
	//顯示圖像
	imshow("image", img);
 
	//等待按鍵,按鍵盤任意鍵返回
	waitKey();
 
	return 0;
 
       //錯誤指出: feihongmeilian
       //經本人驗證,string imagename = "lena.jpg";  處是可以使用相對地址,本人使用環境為OpenCV 2.4.3
       //圖片為meinv.jpg置於代碼文件所在文件夾的上一級文件夾中,string imagename = "..\\meinv.jpg"  圖片可正常顯示。
      //需提醒註意的是 雙引號“” 中出現的第一個 斜杠 \ 被視作轉義字元
}

C++版本的好處

  1. 在於可以儘量避免使用指針這種危險的東西了。
  2. 另一個好處便在於,不用費心去release資源了,因為在其destructor裡面,系統會自動幫你搞定。


wmzzzz: 死PP了...運行這個程式, Mat img = imread(imagename); 這行報以下錯 Unhandled exception at 0x7854fdf1 in WmTestOpencv.exe: 0xC0000005: Access violation reading location 0xcccccccc. 好像是環境問題..我用C版本的沒有問題..文件路徑也沒有錯 求解..這是怎麼回事啊???

Python版本

# -*- coding:utf-8 -*-
###########################################################
# OpenCV example
# By ChaiShushan 2008
###########################################################
 
import sys
 
# 導入OpenCV模塊
 
from opencv.cv import *
from opencv.highgui import *
 
if __name__ == '__main__':
 
    if len(sys.argv) > 1:
 
        # 打開圖像
 
        image = cvLoadImage(sys.argv[1])
        if not image: sys.exit(-1)
 
        # 創建視窗
 
        cvNamedWindow ("mywin")
 
        # 顯示圖像
 
        cvShowImage ("mywin", image)
        cvWaitKey (0)

註: Python版本由chai2010改寫.

OpenCV 2.1 with Python 2.6 (use new interface)

# -*- coding:utf-8 -*-
# mycv.py
 
import sys
 
# 導入OpenCV模塊
 
import cv
 
if __name__ == '__main__':
 
    # 打開圖像
 
    image = cv.LoadImage ("lena.jpg")
 
    # 創建視窗
 
    cv.NamedWindow ("mywin")
 
    # 顯示圖像
 
    cv.ShowImage ("mywin", image)
    cv.WaitKey (0)
Views
個人工具