应用medianBlur以及拉普拉斯和阈值滤波器
Applying medianBlur as well as Laplacian and threshold filters
我有一个函数,具有以下签名:
Mat cartoonifyImage( Mat, Mat );
我还有一个VS2010程序,如下所示,我将许多过滤器应用于网络摄像头流,如本书所示:掌握OpenCV
int main( int argc, const char** argv )
{
VideoCapture camera;
camera.open(0);
if( !camera.isOpened() )
{
cerr << "Could not access the camera!" << endl;
return 1;
}
while( true )
{
Mat cameraFrame;
camera >> cameraFrame;
if( cameraFrame.empty() )
{
cerr << "Could not grab a camera frame!" << endl;
return 1;
}
// imshow( "Camera Test", cameraFrame );
Mat displayedFrame( cameraFrame.size(), CV_8UC3 );
cartoonifyImage( cameraFrame, displayedFrame );
imshow( "Cartoonifier!", displayedFrame );
int keypress = waitKey( 20 );
if( keypress == 27 ) break;
}
}
这是我的函数定义:
Mat cartoonifyImage( Mat srcColor, Mat mask )
{
Mat gray, edges;
cvtColor( srcColor, gray, CV_BGR2GRAY );
const int MEDIAN_BLUR_FILTER_SIZE = 7;
const int LAPLACIAN_FILTER_SIZE = 5;
const int EDGES_THRESHOLD = 80;
medianBlur( gray, gray, MEDIAN_BLUR_FILTER_SIZE );
Laplacian( gray, edges, CV_8U, LAPLACIAN_FILTER_SIZE );
threshold( edges, mask, EDGES_THRESHOLD, 255, THRESH_BINARY_INV );
return( mask );
}
当我运行程序时,我会得到一个空白(灰色)窗口。在第一个imshow
被注释掉的地方,我确保网络摄像头正常工作,并且我可以在窗口中看到我自己的图像,所以问题一定在其他地方。有人能帮我了解问题出在哪里以及我做错了什么吗?
谢谢你,
您显示的帧从未被填充。
(你把它传递到函数中,它在那里被操纵,但由于你给了它一个副本,你就无法得到结果)
或者从卡通图片中返回垫子:
Mat displayed = cartoonifyImage( cameraFrame );
或通过参考:
void cartoonifyImage( const Mat & cameraFrame, Mat & displayedFrame );
Mat cartoonifyImage( Mat srcColor )
{
Mat gray, edges, mask;
cvtColor( srcColor, gray, CV_BGR2GRAY );
const int MEDIAN_BLUR_FILTER_SIZE = 7;
const int LAPLACIAN_FILTER_SIZE = 5;
const int EDGES_THRESHOLD = 80;
medianBlur( gray, gray, MEDIAN_BLUR_FILTER_SIZE );
Laplacian( gray, edges, CV_8U, LAPLACIAN_FILTER_SIZE );
threshold( edges, mask, EDGES_THRESHOLD, 255, THRESH_BINARY_INV );
return ( mask );
}
int main( int argc, const char** argv )
{
VideoCapture camera;
camera.open(0);
if( !camera.isOpened() )
{
cerr << "Could not access the camera!" << endl;
return 1;
}
while( true )
{
Mat cameraFrame;
camera >> cameraFrame;
if( cameraFrame.empty() )
{
cerr << "Could not grab a camera frame!" << endl;
return 1;
}
//imshow( "Camera Test", cameraFrame );
Mat displayedFrame( cameraFrame.size(), CV_8UC3 );
displayedFrame = cartoonifyImage(cameraFrame);
imshow( "Cartoonifier!", displayedFrame );
int keypress = waitKey( 20 );
if( keypress == 27 ) break;
}
}
相关文章:
- 传感器值的阈值
- 我们可以将阈值应用于色彩空间模型的单个组件(如 RGB 和 LAB)吗?
- 错误:断言失败 (src.type() == CV_8UC1) 在阈值中
- 如何使用中值滤波器算法去除胡椒噪声
- 使用阈值进行加速度计振动检测
- OpenCV Otsu的阈值:计算多个Mat对象的单个阈值
- 使用贝尔曼福特检测产品超过阈值的周期
- 为什么用于阈值矩阵元素的 Matlab 逻辑索引操作在性能上优于 mex 实现?
- 用于浮点阈值操作的 SIMD
- Java opencv inRange 阈值函数将我的图像分成三个不同的图像
- Unordered_map,检查滑动窗口中的阈值
- 一种无需使用if语句而无需使用阈值的方法
- 尝试在给定阈值下将所有像素更改为黑白
- 使用自动阈值进行分段
- 设置多部分上传阈值
- 在RGB图像上执行阈值操作
- Android -OpenCV模板与阈值匹配
- OPENCV3带有阈值函数的错误
- 应用medianBlur以及拉普拉斯和阈值滤波器
- 在rgb图像上应用二值阈值滤波器