我正在使用OpenCv中的連接組件標籤(CCL)操作(使用C++語言)。要查看CCL是否可靠工作,我必須在調試時檢查圖像中的每個像素值。我試過將CCL的結果保存爲圖像,但是我無法達到像素的數字值。在調試過程中有沒有辦法做到這一點?OpenCv查看圖像中的每個像素值
0
A
回答
0
將CCL矩陣轉換爲[0,255]範圍內的值並將其保存爲圖像。例如:
cv::Mat ccl = ...; // ccl operation returning CV_8U
double min, max;
cv::minMaxLoc(ccl, &min, &max);
cv::Mat image = ccl * (255./max);
cv::imwrite("ccl.png", image);
或所有值存儲在一個文件中:
std::ofstream f("ccl.txt");
f << "row col value" << std::endl;
for (int r = 0; r < ccl.rows; ++r) {
unsigned char* row = ccl.ptr<unsigned char>(r);
for (int c = 0; c < ccl.cols; ++c) {
f << r << " " << c << " " << static_cast<int>(row[c]) << std::endl;
}
}
0
當然有,但它取決於您使用的圖像類型。
http://docs.opencv.org/doc/user_guide/ug_mat.html#accessing-pixel-intensity-values
你使用哪種IDE進行調試?有一個Visual Studio插件的OpenCV:
http://opencv.org/image-debugger-plug-in-for-visual-studio.html https://visualstudiogallery.msdn.microsoft.com/e682d542-7ef3-402c-b857-bbfba714f78d
要簡單地打印簡歷::墊類型CV_8UC1到一個文本文件,使用下面的代碼:
// create the image
int rows(4), cols(3);
cv::Mat img(rows, cols, CV_8UC1);
// fill image
for (int r = 0; r < rows; r++)
{
for (int c = 0; c < cols; c++)
{
img.at<unsigned char>(r, c) = std::min(rows + cols - (r + c), 255);
}
}
// write image to file
std::ofstream out("output.txt");
for (int r = -1; r < rows; r++)
{
if (r == -1){ out << '\t'; }
else if (r >= 0){ out << r << '\t'; }
for (int c = -1; c < cols; c++)
{
if (r == -1 && c >= 0){ out << c << '\t'; }
else if (r >= 0 && c >= 0)
{
out << static_cast<int>(img.at<unsigned char>(r, c)) << '\t';
}
}
out << std::endl;
}
只需更換IMG ,排,排列着你的變種,把「填充圖像」放在一邊,它應該起作用。第一行和第一列是該行/列的索引。 「output.txt」將保留在您可以在Visual Studio的項目調試設置中指定的調試工作目錄中。
0
如已經由@Gombat和例如提到here,在Visual Studio中可以安裝Image Watch。
如果要將Mat
的值保存爲文本文件,則不需要重新創建任何內容(請參閱OpenCV Mat: the basic image container)。
例如,您可以保存一個CSV文件只是想:
Mat img;
// ... fill matrix somehow
ofstream fs("test.csv");
fs << format(img, "csv");
完整的示例:
#include <opencv2\opencv.hpp>
#include <iostream>
#include <fstream>
using namespace std;
using namespace cv;
int main()
{
// Just a green image
Mat3b img(10,5,Vec3b(0,255,0));
ofstream fs("test.csv");
fs << format(img, "csv");
return 0;
}
相關問題
- 1. OpenCV:如何填充每個像素的每個RGB顏色值的RGB圖像?
- 2. OpenCV閱讀圖像的像素值
- 3. OpenCV:正常化圖像的像素值
- 4. 在openCV中設置某個圖像中的像素的RGB值
- 5. 如何在MATLAB中查看圖像的像素值?
- 6. 查找OpenCV中RGB圖像的中值?
- 7. OpenCV修改圖像像素
- 8. 找到每個像素的光流opencv
- 9. 更新意味着在OpenCV中的每個像素值
- 10. 查看千兆像素圖像
- 11. 在OpenCV中訪問cvMat圖像中的像素值
- 12. 如何更改Opencv圖像查看器?
- 13. 提取圖像中每個像素的十六進制值
- 14. 訪問OpenCV中灰度圖像的像素值
- 15. 如何在OpenCV中訪問圖像的像素值
- 16. 在opencv中讀取二進制圖像的像素值
- 17. 在openCv中寫入像素值大於1的浮動圖像
- 18. 獲取圖像中像素的HSV值OpenCV
- 19. 在opencv中獲取LAB圖像的像素值
- 20. 檢查灰度圖像中的像素是否爲黑色(OpenCV)
- 21. 獲取灰度或黑白圖像的每個像素的像素值?
- 22. 通過單擊OpenCV中圖像中的某個點來訪問像素值
- 23. 訪問負像素值OpenCV
- 24. 訪問負像素值OpenCV
- 25. OpenCV - 縮放/拉伸圖像的每個像素行的方式不同?
- 26. 如何訪問RGB圖像的每個像素值?
- 27. 如何使用每個像素的RGB值創建圖像
- 28. 如何讀取OpenCV中的像素值?
- 29. 更改Mat中的像素值opencv
- 30. 複製OpenCV中的像素值
你使用哪種IDE進行調試? – Gombat
@Gombat VS 2013 – elmass