我正在使用以下代码为图像添加一些噪声(直接来自OpenCV参考,第449页 - 解释cv::Mat::begin):
void
simulate_noise(Mat const &in, double stddev, Mat &out)
{
cv::Size s = in.size();
vector<double> noise = generate_noise(s.width*s.height, stddev);
typedef cv::Vec<unsigned char, 3> V4;
cv::MatConstIterator_<V4> in_itr = in.begin<V4>();
cv::MatConstIterator_<V4> in_end = in.end<V4>();
cv::MatIterator_<V4> out_itr = out.begin<V4>();
cv::MatIterator_<V4> out_end = out.end<V4>();
for (; in_itr != in_end && out_itr != out_end; ++in_itr, ++out_itr)
{
int noise_index = my_rand(noise.size());
for (int j = 0; j < 3; ++j)
(*out_itr)[j] = (*in_itr)[j] + noise[noise_index];
}
}
Run Code Online (Sandbox Code Playgroud)
没有什么过于复杂:
in并out …我想访问未知类型矩阵的元素:
for(int ii = 0; ii < origCols; ii++)
{
colIdx.at<img.type()>(0,ii) = ii+1; // make one based index
}
Run Code Online (Sandbox Code Playgroud)
定义类型的表达式(在<>中)必须是常量,因此上面的代码不起作用.有没有办法做到这一点,而不仅仅是切换不同的图像类型?