Opencv簡單圖像操作方法實戰(zhàn)
更新時間:2024年02月18日 15:23:04 作者:stoAir
OpenCV是一個開源的計算機視覺庫,它提供了一系列豐富的圖像處理和計算機視覺算法,這篇文章主要給大家介紹了關(guān)于Opencv簡單圖像操作方法的相關(guān)資料,需要的朋友可以參考下
Opencv
一、讀取圖片
1.imshow
Mat imread(const string& filename, intflags=1 );
flags:
enum
{
/* 8bit, color or not */
CV_LOAD_IMAGE_UNCHANGED =-1,
/* 8bit, gray */
CV_LOAD_IMAGE_GRAYSCALE =0,
/* ?, color */
CV_LOAD_IMAGE_COLOR =1,
/* any depth, ? */
CV_LOAD_IMAGE_ANYDEPTH =2,
/* ?, any color */
CV_LOAD_IMAGE_ANYCOLOR =4
};
Mat image0=imread("dota.jpg",CV_LOAD_IMAGE_ANYDEPTH | CV_LOAD_IMAGE_ANYCOLOR);//載入最真實的圖像
Mat image1=imread("dota.jpg",0);//載入灰度圖
Mat image2=imread("dota.jpg",199);//載入3通道的彩色圖像
Mat logo=imread("dota_logo.jpg");//載入3通道的彩色圖像
- CV_LOAD_IMAGE_UNCHANGED,這個標(biāo)識在新版本中被廢置了,忽略。
- CV_LOAD_IMAGE_ANYDEPTH- 如果取這個標(biāo)識的話,若載入的圖像的深度為16位或者32位,就返回對應(yīng)深度的圖像,否則,就轉(zhuǎn)換為8位圖像再返回。
- CV_LOAD_IMAGE_COLOR- 如果取這個標(biāo)識的話,總是轉(zhuǎn)換圖像到彩色一體
- CV_LOAD_IMAGE_GRAYSCALE- 如果取這個標(biāo)識的話,始終將圖像轉(zhuǎn)換成灰度
- flags >0返回一個3通道的彩色圖像。
- flags =0返回灰度圖像。
- flags <0返回包含Alpha通道的加載的圖像。
2.namedWindow
void namedWindow(const string& winname,int flags=WINDOW_AUTOSIZE );
- WINDOW_NORMAL設(shè)置了這個值,用戶便可以改變窗口的大?。]有限制)
- WINDOW_AUTOSIZE如果設(shè)置了這個值,窗口大小會自動調(diào)整以適應(yīng)所顯示的圖像,并且不能手動改變窗口大小。
- WINDOW_OPENGL 如果設(shè)置了這個值的話,窗口創(chuàng)建的時候便會支持OpenGL。
3.imshow
void imshow(const string& winname, InputArray mat);
4.效果圖
c++

python

二、圖像操作
python
import cv2 as cv
import numpy as np
image = cv.imread("/home/stoair/Opencv/Images/1.png", 4)
cv.namedWindow("initial",cv.WINDOW_NORMAL)
cv.namedWindow("after",cv.WINDOW_NORMAL)
height = image.shape[0]
width = image.shape[1]
cv.imshow("initial",image)
for i in range(height):
for j in range(width):
(b, g, r) = image[i, j]
ave = b/3 + g/3 + r/3
image[i, j] = (ave, ave, ave)
cv.imshow("after",image)
cv.waitKey(0)

c++
#include<opencv2/core/core.hpp>
#include<opencv2/highgui/highgui.hpp>
#include <opencv2/imgcodecs.hpp>
#include <opencv2/opencv.hpp>
using namespace cv;
int main()
{
Mat image0 = imread("/home/stoair/Opencv/Images/1.png", 4);
namedWindow("initial", WINDOW_NORMAL);
namedWindow("change", WINDOW_NORMAL);
imshow("initial", image0);
int height = image0.rows;
int width = image0.cols;
for(int i = 0; i < height; i++){
for(int j = 0; j < width; j++){
unsigned char b = image0.at<Vec3b>(i, j)[0];
unsigned char g = image0.at<Vec3b>(i, j)[1];
unsigned char r = image0.at<Vec3b>(i, j)[2];
unsigned char ave = b/3 + g/3 +r/3;
image0.at<Vec3b>(i, j)[0] = ave;
image0.at<Vec3b>(i, j)[1] = ave;
image0.at<Vec3b>(i, j)[2] = ave;
}
}
imshow("change", image0);
waitKey(0);
return 0;
}總結(jié)
到此這篇關(guān)于Opencv簡單圖像操作方法的文章就介紹到這了,更多相關(guān)Opencv圖像操作內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
基于numpy.random.randn()與rand()的區(qū)別詳解
下面小編就為大家分享一篇基于numpy.random.randn()與rand()的區(qū)別詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
2018-04-04
Python中連通域分割Two-Pass算法的原理與實現(xiàn)詳解
兩遍掃描法(?Two-Pass?),正如其名,指的就是通過掃描兩遍圖像,將圖像中存在的所有連通域找出并標(biāo)記,本文將詳細(xì)介紹Two-Pass算法的原理與實現(xiàn),需要的可以參考下
2023-12-12
python使用ctypes庫調(diào)用DLL動態(tài)鏈接庫
這篇文章主要介紹了python如何使用ctypes庫調(diào)用DLL動態(tài)鏈接庫,幫助大家更好的理解和使用python,感興趣的朋友可以了解下
2020-10-10 
