作为程序员,最常常遇到的情况就是自己所想的和写出来的程序运行结果大相径庭。原因有多种,可能是经验的偏差,语法错误,或者一些别的情况。所以我心血来潮的想写一些记录,方便自己查阅,也分享给你们。
ps:有的漏洞,我会说明原因,有的则没有,也希望读友能指出,感谢。
OpenCV经典操作,卷积核的编写。例如,边缘算子,锐化算子等等。
一、卷积操作
正确操作如下:
//.........(此处省略头文件,命名空间)................//
Mat src,dst;
Mat kernel = (Mat_<float/double>(n,m) << ...);//要求是float或者double
filter2D(src,dst,-1,kernel);//卷积操作
如果你不幸将kernel的类型写成uchar或者char虽然也能运行,但是你将得不到理想的效果。
二、遍历图像像素灰度
//第一种
for(int i = 0; i < img.cols; i++)
{
for(int j = 0; j < img.rows; j++)
{
img.ptr<uchar>(j)[i];
}
}
//第二种
for(int i = 0; i < img.rows; i++)
{
for(int j = 0; j < img.cols; j++)
{
img.ptr<uchar>(i)[j];
}
}
这里强烈建议使用第二种写法,外层for循环图像行,内层for循环图像列。当图像大时,两者速度差异越大。