我正在玩opencv 3.2(對這個庫不熟悉),並注意到cv::Mat::at
方法的一些奇怪的行爲。鍵入有關方法簽名myMat.at
幫助筆記不QTcreator出現,但做露面的方法遍歷圖像的像素時Opencv cv:Mat :: at只允許修改圖像的一部分
第二其餘它修改圖像的只有某一部分時
1 (我會更好地展示截圖和代碼)
代碼
#include <QCoreApplication>
#include <QDebug>
#include <opencv2/opencv.hpp>
#include <opencv2/core.hpp>
#include <opencv2/imgproc.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/imgcodecs.hpp>
#include <stdint.h>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
cv::Mat orignalImg = cv::imread("/path/to/image/pic3.jpg", cv::IMREAD_ANYCOLOR);
cv::Mat modifiedImg = cv::imread("/path/to/image/pic3.jpg", cv::IMREAD_ANYCOLOR);
for (int r = 0; r < modifiedImg.rows; ++r)
{
for (int c = 0; c < modifiedImg.cols; ++c)
{
modifiedImg.at<uint8_t>(r, c) = modifiedImg.at<uint8_t>(r, c) * 0.2f;
}
}
cv::imshow("original", orignalImg);
cv::imshow("modified", modifiedImg);
cv::waitKey(0);
return a.exec();
}
正如你所看到的,右側的圖像沒有被完全處理,但只是其中的一部分。
這是怎麼發生的? 根據代碼,它應該處理整個圖像。
我在那裏錯過了什麼?
您正在使用'cv :: Mat :: at'不正確。你有顏色(即3通道圖像),但你在'''而不是'在'' –
@DanMašek爲什麼是不正確的? 3通道意味着rgb顏色模型,它需要每個通道的無符號字符(0,255)是不是? – ampawd
當然,但你沒有指定頻道,只有在訪問這些值時的行和列。 –