圖像像素點賦值_Python 圖像處理 OpenCV (2):像素處理與 Numpy 操作以及 Matplotlib 顯示圖像...

fb828e7aae8fd5b3e26da479fef8c365.png

普通操作

1. 讀取像素

讀取像素可以通過行坐標和列坐標來進行訪問,灰度圖像直接返回灰度值,彩色圖像則返回B、G、R三個分量。

需要注意的是, OpenCV 讀取圖像是 BGR 存儲顯示。

灰度圖片讀取操作:

import cv2 as cv

# 灰度圖像讀取
gray_img = cv.imread("maliao.jpg", cv.IMREAD_GRAYSCALE)
print(gray_img[20, 30])

# 顯示圖片
cv.imshow("gray_img", gray_img)

# 等待輸入
cv.waitKey()
cv.destroyAllWindows()

cc5f37813cbeeb16eaaab26a4d881196.png

對于讀取灰度圖像的像素值,只會返回相應的灰度。

彩色圖像讀取操作:

import cv2 as cv

# 彩色圖像讀取
color_img = cv.imread("maliao.jpg", cv.IMREAD_COLOR)

print(color_img[20, 30])

blue = color_img[20, 30, 0]
print(blue)

green = color_img[20, 30, 1]
print(green)

red = color_img[20, 30, 2]
print(red)

# 顯示圖片
cv.imshow("color_img", color_img)

# 等待輸入
cv.waitKey()
cv.destroyAllWindows()

# 打印結果
[ 3 2 236]
3
2
236

1f9652436d2e0086819e49ee3b8e6e12.png

需要注意的是在獲取彩色圖片像素時的第二個參數 1|2|3 的含義是獲取 BGR 三個通道的像素。

2. 修改像素

修改像素時,直接對像素賦值新像素即可。

如果是灰度圖片,直接賦值即可。

如果是彩色圖片,則需依次給 BGR 三個通道的像素賦值。

import cv2 as cv

# 灰度圖像讀取
gray_img = cv.imread("maliao.jpg", cv.IMREAD_GRAYSCALE)
print(gray_img[20, 30])
# 像素賦值
gray_img[20, 30] = 255
print(gray_img[20, 30])

# 打印結果
72
255

# 彩色圖像讀取
color_img = cv.imread("maliao.jpg", cv.IMREAD_COLOR)
print(color_img[20, 30])
# 像素依次賦值
color_img[20, 30, 0] = 255
color_img[20, 30, 1] = 255
color_img[20, 30, 2] = 255
print(color_img[20, 30])

# 打印結果
[ 3 2 236]
[255 255 255]

如果覺得依次對 BGR 三個通道賦值有些麻煩的話,也可以通過數組直接對像素點一次賦值:

# 像素一次賦值
color_img[20, 30] = [0, 0, 0]
print(color_img[20, 30])

# 打印結果
[0 0 0]

下面是對一個區域的像素進行賦值,將這個區域的像素全都賦值成為白色:

import cv2 as cv

color_img = cv.imread("maliao.jpg", cv.IMREAD_COLOR)
color_img[50:100, 50:100] = [255, 255, 255]

cv.imshow("color_img", color_img)
cv.waitKey()
cv.destroyAllWindows()

7c543d6c7fdfd26f9444a26cb6c8e186.png

使用 Numpy 操作

1. 讀取像素

使用 Numpy 進行像素讀取,調用方式如下:

返回值 = 圖像.item(位置參數)

讀取灰度圖像和彩色圖像如下:

import cv2 as cv

# 讀取灰度圖像
gray_img = cv.imread("maliao.jpg", cv.IMREAD_GRAYSCALE)
print(gray_img.item(20, 30))

# 打印結果
72

# 讀取彩色圖像
color_img = cv.imread("maliao.jpg", cv.IMREAD_COLOR)

blue = color_img.item(20, 30, 0)
print(blue)

green = color_img.item(20, 30, 1)
print(green)

red = color_img.item(20, 30, 2)
print(red)

# 打印結果
3
2
236

2. 修改像素

修改像素需要使用到 Numpy 的?itemset()?方法,調用方式如下:

圖像.itemset(位置, 新值)

下面是我將?[20, 30]?這個修改為白色的示例:

import cv2 as cv

# 讀取彩色圖像
color_img = cv.imread("maliao.jpg", cv.IMREAD_COLOR)

print(color_img[20, 30])

color_img.itemset((20, 30, 0), 255)
color_img.itemset((20, 30, 1), 255)
color_img.itemset((20, 30, 2), 255)

print(color_img[20, 30])

# 輸出結果
[ 3 2 236]
[255 255 255]

注意:普通操作通常用于選擇數組的區域,例如上面的示例中的選擇了?[50:100, 50:100]?這么一個正方形。對于單個像素訪問, Numpy 數組方法 array.item() 和 array.itemset() 被認為更好。

Matplotlib 顯示圖像

我們可以通過 OpenCV 讀入圖像,然后使用 Matplotlib 來進行圖像顯示。

import cv2 as cv
from matplotlib import pyplot as plt

img=cv.imread('maliao.jpg', cv.IMREAD_COLOR)
plt.imshow(img)
plt.show()

如果我們直接使用 Matplotlib 來顯示 OpenCV 讀入的圖像,會得到下面這個藍色的馬里奧:

84533cf1d63a7945bd485ea903935c33.png

這是因為對于 OpenCV 的像素是 BGR 順序,然而 Matplotlib 所遵循的是 RGB 順序。

解決的方案有很多種(循環像素點的不算哈,這個太傻了),如下:

import cv2 as cv
from matplotlib import pyplot as plt

img=cv.imread('maliao.jpg',cv.IMREAD_COLOR)

# method1
b,g,r=cv.split(img)
img2=cv.merge([r,g,b])
plt.imshow(img2)
plt.show()

# method2
img3=img[:,:,::-1]
plt.imshow(img3)
plt.show()

# method3
img4=cv.cvtColor(img, cv.COLOR_BGR2RGB)
plt.imshow(img4)
plt.show()

結果我就不貼了,這三種方法都可以完成 BGR 至 RGB 的轉換。

示例代碼

如果有需要獲取源碼的同學可以在公眾號回復「OpenCV」進行獲取。

參考

https://blog.csdn.net/eastmount/article/details/82120114

http://woshicver.com/

感謝閱讀4bf454dfc0dca17ed2b1b270799b0480.png

386916681feee57a6c43ca49142bf76a.gif

7b2196511b821da9631b6e15ebf73b5c.gif

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/258295.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/258295.shtml
英文地址,請注明出處:http://en.pswp.cn/news/258295.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

cocopods

一、什么是CocoaPods 1、為什么需要CocoaPods 在進行iOS開發的時候,總免不了使用第三方的開源庫,比如SBJson、AFNetworking、Reachability等等。使用這些庫的時候通常需要: 下載開源庫的源代碼并引入工程向工程中添加開源庫使用到的framework…

CSS3學習手記(10) 過渡

CSS3過渡 允許css的屬性值在一定的時間內平滑地過渡在鼠標單擊、獲取焦點、被點擊或對元素任何改變中觸發,并圓滑地以動畫效果改變CSS的屬性值transition transition-property屬性檢索或設置對象中的參與過渡的屬性 語法 transition-property:none|all|property …

POJ 1286 Necklaces of Beads (Burnside定理,有限制型)

題目鏈接&#xff1a;http://vjudge.net/problem/viewProblem.action?id11117 就是利用每種等價情形算出置換節之后算組合數 #include <stdio.h> #include <cstring> #include <cstdlib> #include <algorithm> #include <cmath>using namespace…

全局搜索快捷鍵_Windows 自帶的聚合搜索來了,與 Mac 的 Spotlight 相比體驗如何?...

最近 Windows 10 推出了自帶的聚合搜索功能 PowerToys Run&#xff0c;取代了之前的 WinR。蘋果的 macOS 以人性化著稱&#xff0c;有幾個功能讓 Windows 用戶一直很羨慕&#xff0c;比如全局的聚合搜索工具 Spotlight。在任何界面 command空格&#xff0c;輸入關鍵字就能搜索電…

transform你不知道的那些事

transform是諸多css3新特性中最打動我的&#xff0c;因為它讓方方正正的box module變得真實了。 transform通過一組函數實現了對盒子大小、位置、角度的2D或者3D變換。不過很長時間內&#xff0c;我對以下問題都想不太明白&#xff1a; 1、尺寸縮放scale與zoom變換有何不同&…

【SVM】簡單介紹(三)

我們考慮SVM的對偶問題&#xff0c;我們通常是在對偶空間中進行求解的。 1、Lagrange Multipliers 對于一個很一般的問題 Minimize f(x)subject to {a(x)≥0b(x)≤0c(x)0\begin{aligned} \text { Minimize } & f(x) \\ \text { subject to } \quad & \left\{\begin{a…

玩轉iOS開發:NSURLSession講解(三)

文章分享至我的個人技術博客: https://cainluo.github.io/14986211698053.html 前言 雖然前面兩講都是說了NSURLSession的一些理論上的知識, 但我們現在起碼對NSURLSession有個大概的了解, 并不會像一開始的那樣, 一臉懵逼的看著, 這個請求是什么鬼, 那個方法是什么鬼, Task是什…

輕松搞定面試中的二叉樹題目

版權全部&#xff0c;轉載請注明出處&#xff0c;謝謝&#xff01;http://blog.csdn.net/walkinginthewind/article/details/7518888 樹是一種比較重要的數據結構&#xff0c;尤其是二叉樹。二叉樹是一種特殊的樹&#xff0c;在二叉樹中每一個節點最多有兩個子節點&#xff0c;…

李倩星r語言實戰_《基于R的統計分析與數據挖掘》教學大綱

《基于R的統計分析與數據挖掘》課程教學大綱課程代碼&#xff1a;090542009課程英文名稱&#xff1a;R Language and Data Mining課程總學時&#xff1a;32講課&#xff1a;32實驗&#xff1a;0上機&#xff1a;0適用專業&#xff1a;應用統計學大綱編寫(修訂)時間&#xff1a;…

自動化測試小結

最近差不多一年從事自動化的測試工作&#xff0c;從開始對自動化一點都不了解到現在能從實現用例、手動命令行執行用例、自制工具來執行用例&#xff0c;感覺進步還是有的。 自動化測試對于手動測試應該是有不小的優勢的&#xff0c;雖然在自動化的用例實現中剛開始的時候會顯得…

python地理可視化_【Python教程】地理可視化之二

Basemap是Matplotlib的一個子包&#xff0c;負責地圖繪制。昨天的推送對如何繪制風向圖進行了描述&#xff0c;本文再次利用該包簡單介紹如何繪制海洋及海冰溫度彩色圖示&#xff0c;該圖常見于NOAA官網。具體操作如下&#xff1a;導入命令1)設置工作環境并導入程序包%cd "…

尋找白板上的便簽條

問題來源&#xff1a;http://answers.opencv.org/question/162480/contour-detection-for-gray-stickers-on-white-background/ 題目的大概意思就是這樣的白板&#xff0c;尋找上面的各種便簽條。我找到了橘色的&#xff0c;結果是這樣代碼是這樣Mat src imread("gray-st…

LeetCode Permutations

原題鏈接在這里&#xff1a;https://leetcode.com/problems/permutations/ 題目&#xff1a; Given a collection of distinct numbers, return all possible permutations. For example,[1,2,3] have the following permutations:[1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2]…

去除內存上的警告,避免程序崩掉

# pragma clang diagnostic push # pragma clang diagnostic ignored "-Warc-performSelector-leaks" [self performSelector:callFunc withObject:array[1]]; # pragma clang diagnostic pop 使用原理&#xff1a;將出現警告的代碼加入內存棧中轉載于:https://www.c…

opengl2 vtk 編譯_編譯和使用VTK時值得注意的點(待續)

最近的一個項目中需要使用VTK&#xff0c;于是開始了VTK的漫漫編譯之路。長篇大論的編譯步驟網上數不勝數&#xff0c;在這里不再細說&#xff0c;可自行google。這里主要說一些在編譯過程中需要注意的地方&#xff0c;以免走歪路。1、使用cmake進行第一次configure的時候需要選…

gg

轉載于:https://www.cnblogs.com/lyzuikeai/p/7091206.html

二:Go編程語言規范-類型

1.類型 布爾值&#xff0c;數值與字符串類型的實例的命名是預聲明的。 數組&#xff0c;結構&#xff0c;指針&#xff0c;函數&#xff0c;接口&#xff0c;切片&#xff0c;映射和信道這些復合類型可由類型字面構造。 每個類型 T 都有一個 基本類型&#xff1a;若 T 為預聲明…

HDU 1728 逃離迷宮

這道題做的我想哭啊。。WA了將近十次了吧 一開始我用數組模擬的隊列&#xff0c;后來和老大代碼對拍&#xff0c;感覺改的是基本都一模一樣了&#xff0c;還是WA 實在沒有辦法了&#xff0c;改用queue了 題目里的x是列y是行&#xff0c;和代碼里的反過來的&#xff0c;要注意&a…

Nginx(六)-- 配置文件之Gzip

1.概念及作用 Gizp主要對內容、靜態文件做壓縮&#xff0c;用來提升網站訪問速度&#xff0c;節省帶寬。 2.使用方法 gzip既可以配置在server中&#xff0c;也可以配置在server外&#xff0c;此處配置在server中&#xff0c;如下&#xff1a; 說明&#xff1a;  gizp on|off 是…

誤碼率越高越好還是越低越好_夜間護理步驟越多越好還是越少越好?NFF

現在很多人都知道了夜晚是護膚的黃金護膚時間&#xff0c;有些很聰明的姐妹就從夜晚著手&#xff0c;使用很多種護膚品&#xff0c;希望達到事半功倍的效果&#xff0c;但好皮膚不常有&#xff0c;皮膚問題卻常有&#xff01;既然如此&#xff0c;不少人就問了&#xff0c;夜間…