簡體   English   中英

C++ 等同於 Python 的帶比較的數組訪問(數組[條件] = 值)

[英]C++ equivalent of Python's array access with comparison (array[condition] = value)

我正在關注此 OpenCV Watershed 教程,但將其移植到 C++: https ://docs.opencv.org/master/d3/db4/tutorial_py_watershed.html

簡而言之,在教程的某些時候,作者將使用類似於以下的操作訪問和分配矩陣中的像素:

markers[unknown==255] = 0

或這個

img[markers == -1] = [255,0,0]

我想做的是相當於上述操作,但在 C++ 中。 感覺很簡單,但我就是想不通如何優雅地做到這一點。

對於第一種情況,我可以使用cv::findNonZero來解決它,但對於第二種情況,它變得稍微復雜一些,我想避免 hacky 解決方案。

老實說,這可能已經得到回答,但我不知道搜索時會出現哪些術語,任何指示或幫助將不勝感激。

您可以使用帶有 lower = upper boundary 的 OpenCV 的inRange方法來獲取表示要更改的所需像素的掩碼,然后在 OpenCV 的setTo方法中使用此掩碼:

// Read image
cv::Mat img = cv::imread("image.png");

// Mask everything, that's pure blue (#0000FF)
cv::Mat mask;
cv::inRange(img, cv::Scalar(255, 0, 0), cv::Scalar(255, 0, 0), mask);

// Write mask
cv::imwrite("mask.png", mask);

// Update value in mask to red
img.setTo(cv::Scalar(0, 0, 255), mask);
cv::imwrite("image_new.png", img);

return 0;

這是一些輸入圖像:

輸入

這是獲得的面具:

面具

這是更新后的圖像:

新圖片

希望有幫助!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM