利用cvtColor 进行灰度转换时,不能将  灰度图 转为灰度图,所以在转换前,需对原始图像进行判断。

将这个改成以下

int main(int argc, char* argv[])
{
Mat m = imread("2.jpg", CV_LOAD_IMAGE_COLOR);
IplImage src(m);
cvNamedWindow("showImage");
IplImage* gimg = cvCreateImage(cvGetSize(&src), 8, 1);
cvCvtColor(&src, gimg, CV_BGR2GRAY);
cvSaveImage("1.jpg", gimg);
cvShowImage("showImage", gimg);
cvWaitKey(0);
cvReleaseImage(&gimg);
cvDestroyWindow("showImage");
return 0;
}

  完整代码:

#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include <iostream>
#include <stdio.h>
#include <stdlib.h> using namespace cv;
using namespace std; /// Global variables
Mat src, src_gray;
int thresh = 200;
int max_thresh = 255; char* source_window = "Source image";
char* corners_window = "Corners detected"; /// Function header
void cornerHarris_demo(int, void*);
void cvtColor_src(Mat &src, Mat &dst); /** @function main */
int main(int argc, char** argv)
{
/// Load source image and convert it to gray
src = imread("E:\\VS2015Opencv\\vs2015\\project\\picture\\06.jpg"); // 转换单通道
cvtColor_src(src,src_gray); /// Create a window and a trackbar
namedWindow(source_window, CV_WINDOW_AUTOSIZE);
createTrackbar("Threshold: ", source_window, &thresh, max_thresh, cornerHarris_demo);
imshow(source_window, src); cornerHarris_demo(0, 0); waitKey(0);
return(0);
} void cvtColor_src(Mat &src, Mat &src_gray)
{
// 转换单通道
if (src.channels() == 4) {
cv::cvtColor(src, src_gray, CV_BGRA2GRAY);
}
else if (src.channels() == 3) {
cv::cvtColor(src, src_gray, CV_BGR2GRAY);
}
else if (src.channels() == 2) {
cv::cvtColor(src, src_gray, CV_BGR5652GRAY);
}
else if (src.channels() == 1) {// 单通道的图片直接就不需要处理
src_gray = src;
}
else { // 负数,说明图有问题 直接返回
src_gray = src;
} } /** @function cornerHarris_demo */
void cornerHarris_demo(int, void*)
{ Mat dst, dst_norm, dst_norm_scaled;
dst = Mat::zeros(src.size(), CV_32FC1); /// Detector parameters
int blockSize = 2;
int apertureSize = 3;
double k = 0.04; /// Detecting corners
cornerHarris(src_gray, dst, blockSize, apertureSize, k, BORDER_DEFAULT); /// Normalizing
normalize(dst, dst_norm, 0, 255, NORM_MINMAX, CV_32FC1, Mat());
convertScaleAbs(dst_norm, dst_norm_scaled); /// Drawing a circle around corners
for (int j = 0; j < dst_norm.rows; j++)
{
for (int i = 0; i < dst_norm.cols; i++)
{
if ((int)dst_norm.at<float>(j, i) > thresh)
{
circle(dst_norm_scaled, Point(i, j), 5, Scalar(0), 2, 8, 0);
}
}
}
/// Showing the result
namedWindow(corners_window, CV_WINDOW_AUTOSIZE);
imshow(corners_window, dst_norm_scaled);
}

  

最新文章

  1. 恢复SQL Server被误删除的数据
  2. angular路由 模块 依赖注入
  3. Python程序的首行
  4. 菜鸟学自动化测试(一)---- selenium IDE
  5. Cocos2d-x 3.2 学习笔记(十一)Game 2048
  6. LeetCode Power of Three
  7. JS传参出现乱码(转载)
  8. Qt5该插件机制(2)--QxxxFactory类和QFactoryLoader类别
  9. Date对象 识记
  10. [51nod Round15 E ]Danganronpa
  11. 牛客练习赛43C Tachibana Kanade Loves Review
  12. 性能测试day02_后端网络协议架构
  13. ESXi 6.5 总是会话超时
  14. cocos代码研究(22)Widget子类Layout学习笔记
  15. PHP之string之chr()函数使用
  16. selenium调用Firefox和Chrome需要注意的一些问题,和出现的报错selenium:expected [object undefined] undefined to be a string
  17. explain解析
  18. EasyGBS国标流媒体服务器GB28181国标方案安装使用文档
  19. SvcUtil.exe导入WCF
  20. IIS5.1、IIS6.0、IIS7.5中安装配置MVC 3

热门文章

  1. DFT 问答 I
  2. 随机定时修改密码change_passwd.sh
  3. luoguP5219 无聊的水题 I 多项式快速幂
  4. CodeForces - 1107E 区间DP
  5. Linux shell 只删除目录下所有(不知道文件名字)文件,只删除文件夹
  6. 2019-2020-2 《网络对抗技术》Exp0 环境搭建-Kali Linux 的安装
  7. deepin开机自动启动服务备忘
  8. 【你不知道的javaScript 上卷 笔记3】javaScript中的声明提升表现
  9. Wannafly Camp 2020 Day 7H 游戏 - 欧拉筛,GCD
  10. gitlab 更换服务器后访问 Integrations 出现 500 错误