在这方面遇到了一些麻烦。举一个简单的例子,假设我想查找灰度图像的强度值并将它们写入一个新数组,但假设将强度更改一定量。我将如何使用 opencv 执行此操作?我一直在尝试类似的方法来尝试和练习:
int main(int argc, char** argv){
Mat img = imread(argv[1], CV_LOAD_IMAGE_UNCHANGED), img_grey, dst;
if (img.empty())
{
return -1;
}
cvtColor(img, img_grey, CV_BGR2GRAY);
dst = Mat::zeros(img_grey.size(), img_grey.type());
for
(int x = 1; x < dst.rows - 1; x++)
{
for (int y = 1; y < dst.cols - 1; y++)
{
dst.at<uchar>(y, x) = x;
}
}
namedWindow("New", CV_WINDOW_AUTOSIZE);
namedWindow("Original", CV_WINDOW_AUTOSIZE);
imshow("New", dst);
imshow("Original", img);
waitKey(0);
return 0;
}
最佳答案
鉴于您访问图像的方式,您应该更改
dst.at<uchar>(y, x) = x;
到
dst.at<uchar>(x, y) = x;
查看 Mat::at()
了解更多信息。
编辑:正如@Micka 指出的那样,你真的应该重命名你的 x
和 y
因为 x
通常被认为是水平轴,对应于“列方向”。正常用例如下:
for(int y = 0; y < mat.rows; y++)
for(int x = 0; x < mat.cols; x++)
mat.at<uchar>(y,x) = ...;
关于c++ - 将像素值写入空白矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26607178/