1. 程式人生 > >opencv3實現影象修補-inpaint函式

opencv3實現影象修補-inpaint函式

#include<iostream>
#include<opencv2/opencv.hpp>

using namespace std;
using namespace cv;

bool g_bDrawing = false;
Point g_CurrPoint, g_OrgPoint;
int g_nThick = 5, g_nBlue = 255, g_nGreen = 255, g_nRed = 0;
int g_nImageOneValue = 49;
Mat srcImage;
Mat grayImage;
Mat maskImage;

/*注意:不能在毀掉函式中寫入未初始化的矩陣類,所以需要用時,需要寫一個標誌位,然後再在while(1)迴圈內使用*/
void onMouse(int event, int x, int y, int flag, void *param)
{
	Mat &img = *(cv::Mat*)param;

	switch (event)
	{
		//移動滑鼠的時候
	case CV_EVENT_MOUSEMOVE:
	{
							   g_OrgPoint = g_CurrPoint;
							   g_CurrPoint = Point(x, y);

							   if (g_bDrawing == 1)
							   {
								   line(srcImage, g_CurrPoint, g_OrgPoint, Scalar(g_nBlue, g_nGreen, g_nRed), g_nThick);
								   imshow("【滑鼠事件視窗】", srcImage);

								   //在掩膜圖上進行顯示
								   line(maskImage, g_CurrPoint, g_OrgPoint, Scalar(g_nBlue, g_nGreen, g_nRed), g_nThick);
								   imshow("【掩膜影象】", maskImage);
							   }
	}
		break;
		//點選滑鼠左鍵時
	case CV_EVENT_LBUTTONDOWN:
	{
								 g_bDrawing = true;
								 g_OrgPoint = Point(x, y);
								 g_CurrPoint = g_OrgPoint;
	}
		break;
		//鬆開滑鼠左鍵時
	case CV_EVENT_LBUTTONUP:
	{
							   g_bDrawing = false;
	}
		break;
	}
}

int main()
{
	Mat tempImage;
	RNG &rng = theRNG();

	srcImage = imread("lili.jpg");

	//用一個變數來儲存原影象
	Mat g_srcImage;
	srcImage.copyTo(g_srcImage);

	//為掩膜圖 分配空間
	maskImage.create(srcImage.size(), CV_8UC1);
	maskImage = Scalar::all(0);

	namedWindow("【滑鼠事件視窗】");
	setMouseCallback("【滑鼠事件視窗】", onMouse, 0);

	namedWindow("【滾動條視窗】", 0);
	createTrackbar("thick", "【滾動條視窗】", &g_nThick, 100, 0);
	createTrackbar("Blue", "【滾動條視窗】", &g_nBlue, 255, 0);
	createTrackbar("Green", "【滾動條視窗】", &g_nGreen, 255, 0);
	createTrackbar("Red", "【滾動條視窗】", &g_nRed, 255, 0);

	char key;
	while (1)
	{
		imshow("【滑鼠事件視窗】", srcImage);
		key = waitKey();
		if (key == 27)
			break;

		//如果檢測到 鍵值是1 則恢復原圖
		if (key == '1')
		{
			g_srcImage.copyTo(srcImage);
			maskImage = Scalar::all(0);
			imshow("【滑鼠事件視窗】", srcImage);
		}

		//如果檢測到空格 則開始執行影象修復
		Mat dstImage;
		dstImage.create(srcImage.size(), srcImage.type());
		if (key == ' ')
		{
			inpaint(srcImage, maskImage, dstImage, 3, INPAINT_TELEA);
			imshow("【修補後的影象】", dstImage);
		}
	}

	return 0;
}

相關推薦

opencv3實現影象修補-inpaint函式

#include<iostream> #include<opencv2/opencv.hpp> using namespace std; using namespace cv; bool g_bDrawing = false; Point g_C

OpenCV3之——影象修補inpaint()函式

#include <opencv2/opencv.hpp> #include <iostream> using namespace std; using namespace cv; #define WINDOW_NAME1 "原始圖" #define

opencv3實現分水嶺演算法-watershed函式

#include<iostream> #include<opencv2/opencv.hpp> using namespace std; using namespace cv; bool g_bDrawing = false; Point g_C

0006-用OpenCV的仿射變換函式warpAffine實現影象的任意角度旋轉!

影象旋轉的含義這裡就不說了。 說下仿射變換的含義,仿射變換實際上是一種線性變換,通過這種變換,可以實現影象的平移、縮放、翻轉、旋轉、剪下等操作。 在OpenCV中可以通過函式getRotationMatrix2D和函式warpAffine的聯合使用,對影象進行任意角度的旋轉。使用方法如下:

0005-用OpenCV的resize函式實現影象的縮放

影象縮放是什麼意思這裡不用說了吧! 在OpenCV中用resize函式實現影象的縮放,下面介紹這個函式!resize函式原型如下: C++: void resize(InputArray src, OutputArray dst, Size dsize, double fx=0, double fy

0030-用OpenCV的inpaint函式影象的汙點修復

OpenCV提供了inpaint函式做影象的汙點修復,它是基於畫素鄰域計算進行的修復,原型如下: C++: void inpaint(InputArray src, InputArray inpaintMask, OutputArray dst, double inpaintRadius, int

opencv3實現簡單的數字影象識別(KNN)

正在用opencv3做一個數字影象識別的小專案,要用到KNN,但是不熟悉它的介面,因此,借鑑了大佬的部落格,基本照搬了程式碼,程式碼如下: 大佬的連結如下:http://www.cnblogs.com/denny402/p/5033898.html // knnrecognizenum

opencv3.0 影象濾波方式程式碼實現

#include #include<opencv/cv.h> #include<opencv2/opencv.hpp> using namespace std; int main() { string imName = “lena.jpg”; cv::Mat

OpenCV3計算機視覺Python語言實現(三):使用OpenCV3處理影象

3.1 不同色彩空間的轉換 3.2 傅立葉變換 3.2.1 高通濾波器 HPF 3.2.2 低通濾波器 LPF 3.3 建立模組 3.4 邊緣檢測 3.5 用定製核心做卷積 3.6 修改應用 3.7

opencv3逼近多邊形曲線-approxPolyDP函式影象中的應用

#include<opencv2/opencv.hpp> #include<iostream> #include<vector> using namespace cv; using namespace std; int main()

利用OpenCV的Grabcut()函式實現影象的前景與背景的分割-並對Grabcut()作詳細介紹

Graphcut是一種基於圖論的分割方法,在計算機視覺領域中應用於前景分割、醫學處理、紋理分割及立體視覺等方面,類似於PS中的摳圖功能。基本圖論的分割技術是影象分割領域中新的研究熱點,該方法基於能量優化演算法,將影象分割問題轉換為圖的最小割優化問題。 Grabcut是Gra

OpenCV3之——影象線性混合操作、陣列加權和addWeighted()函式

       線性混合操作是一種典型的二元(兩個輸入)的畫素操作;       計算陣列加權和:addWeighted()函式//函式原型 void addWeighted(InputArray src1,double alpha,InputArray src2,double

二、OpenCV3.4.2 實現影象拼接與融合

參考大神的帖子: 最終完整程式碼如下: #include <iostream> #include <stdio.h> #include "opencv2/core.hpp" #include "opencv2/core/util

OpenCV學習筆記(1)——resize函式實現影象大小歸一化

在影象處理過程中,有時需要把影象調整到同樣大小,便於處理,這時需要用到影象resize() 原函式void resize(InputArray src, OutputArray dst, Size dsize, double fx=0, double fy=0, in

多媒體技術 || 用中位切割演算法實現影象減色

實現環境:python 處理一張紅蘋果圖: 先描述一下中位切割演算法吧: 將圖片內的所有畫素加入到同一個區域 對於所有的區域做以下的事: 計算此區域內所有畫素的 RGB 三元素最大值與最小值的差。 選出相差最大的那個顏色(R 或 G 或 B)

如何協助 MySQL 實現 Oracle 高階分析函式

Oracle 支援一些獨特的語法和函式,在移植到 MySQL 上時或多或少給程式設計師造成了困擾,下面我們針對 Oracle 的一些特殊用法舉例並講解如何用集算器來完成同樣功能。這些方法當然也不限於針對 MySQL,對於所有其它資料庫也能支援。   1、   &

Python使用tensorflow實現影象識別(貓狗大戰)-01

Python使用tensorflow實現影象識別(貓狗大戰)-01 import_data.py import tensorflow as tf import numpy as np import os #引入tensorflow、numpy、os 三個第三方模組 img_widt

c語言實現linux下高危函式system (簡易V1.0版本)

system這個函式真的是要慎用,一不小心就會留下漏洞。 下面是用c語言簡易的實現了一下system函式 #include<stdio.h> #include<stdlib.h> #include<unistd.h> #include<err

影象就是一個函式

原文連結: https://blog.csdn.net/saltriver/article/details/78847964 計算機視覺旨在從影象中提取有用的資訊,這已經被證實是一個極具挑戰性的任務。那麼影象是什麼?或者說我們把影象看作什麼? 有人說影象就是一張圖片,一個場景,一個矩形(

OpenCV實現影象上新增漢字

OpenCV已經更新至3.0了,但自帶函式putText依然不支援影象上新增漢字,所以下面實現了影象中新增漢字功能,話不多說,程式碼奉上。 void GetStringSize(HDC hDC, const char* str, int* w, int* h) { SIZE size;