[英]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.